Синтаксический анализ даты в JavaScript приводит к неверной дате - PullRequest
0 голосов
/ 08 октября 2010

У меня есть этот скрипт:

var a="Thu Oct 07 16:50:0 CEST 2010";
var b=a.split("CEST");
var d = new Date(b[0]);
alert(d);​​​​​​​​​​​

Но это не работает так, как я хочу. На самом деле результат даты отличается от оригинала в строке.

Входные данные: Чт, Окт 07, 16: 50: 0 CEST 2010, но результат отличается от Сб, 07 Окт 2000, 16:50:00 GMT + 0200 (CEST). Что не так?

Ответы [ 3 ]

4 голосов
/ 08 октября 2010

Вы просто теряете информацию о году.split разбивает строку на массив в 'CEST', из которого вы анализируете только первый элемент (часть строки слева от 'CEST').Поэтому вам нужно либо снова добавить правую часть строки, либо использовать более подходящий метод, например replace:

var a="Thu Oct 07 16:50:0 CEST 2010";
var b=a.split("CEST");
var d = new Date(b[0]+b[1]);
alert(d);​​​​​​​​​​​

var a="Thu Oct 07 16:50:0 CEST 2010";
var b= a.replace('CEST','');
var d = new Date(b);
alert(d);​​​​​​​​​​​
1 голос
/ 08 октября 2010

Переставьте строку, замените 'CEST' на время смещения и проанализируйте из него дату:

var str="Thu Oct 07 16:50:00 CEST 2010",

pattern=str.replace('CEST','GMT-0200').split(' ');
pattern.splice(3,0,pattern.pop());
str=pattern[0]+' '+pattern[1]+' '+pattern[2]+', '+pattern.slice(3).join(' ');

D= new Date(Date.parse(str));

alert('\nLocal: '+D+'\nGMT: '+D.toUTCString())

// Переставленная строка: четверг, 07, 2010 16:50:00 GMT-02: 00

  • Firefox:

    Местное время: чт 07.10.2010 14:50:00 GMT-0400 (восточное дневное время)

    GMT: четверг, 07 октября 2010 г. 18:50:00 GMT

    IE:

    Местное время: чт. 7 октября 14:50:00 EDT 2010

    GMT: Чт, 7 октября 2010 18:50:00 UTC

    Safari:

    Местный: Чт, 07 октября 2010 14:50:00 GMT-0400 (восточное дневное время)

    GMT: четверг, 07 октября 2010 18:50:00 GMT

    Опера:

    Местное время: четверг, 07 2010 14:50:00 GMT-0400

    GMT:Чт, 07 октября 2010 18:50:00 GMT

1 голос
/ 08 октября 2010

Насколько я знаю

  1. :0 вместо :00 недействительно
  2. Год должен следовать за датой, например, Thu Oct 07 2010 16:50:00 не быть в конце
  3. Предоставление информации о часовом поясе для анализа должен быть в формате GMT(+|-)nnnn для CEST это будет Thu Oct 07 2010 16:50:00 GMT+0200

Хотя, похоже, на самом деле это не заботит :0

Где вы взяли строку для var a?

...