Подтвердить что ты не робот

В Javascript: Почему новая дата ('2012-1-15') - новая дата ('2012-01-15') == 21600000

Я запутался, но в javascript:

> new Date('2012-1-15') - new Date('2012-01-15')
  21600000

Почему? (21600000/1000/3600 == 6 часов)

4b9b3361

Ответ 1

Формат даты yyyy-mm-dd (2012-01-15) анализируется как дата UTC, тогда как yyyy-m-dd (2012-1-15) анализируется как локальная дата. Это отображается, если вы используете .toString для каждого.

> (new Date( '2012-01-15' )).toString()
"Sat Jan 14 2012 16:00:00 GMT-0800 (Pacific Standard Time)"
> (new Date( '2012-1-15' )).toString()
"Sun Jan 15 2012 00:00:00 GMT-0800 (Pacific Standard Time)"

Заметьте, что я в Калифорнии, а значит, и в Тихом океане. Если вы находитесь в другом часовом поясе, вы получите разные результаты.

Когда JavaScript анализирует даты, он пытается сначала использовать форматы, используемые в большем количестве областей (например, UTC), прежде чем он попытается использовать локализованные форматы дат. Последняя часть формата даты UTC является смещением часового пояса от GMT, который считается равным 0, когда он отсутствует (как в этом примере). Чтобы получить ту же дату, вам понадобится полная метка времени UTC: 2012-01-15T00: 00: 00-08: 00.

Ответ 2

Результат new Date('2012-1-15') зависит от реализации (стандарт ECMAScript, раздел 15.9.4.2).

Ответ 3

a= new Date('2012-1-16') 
b= new Date('2012-01-16')
alert(a);
alert(b);

В первом случае функция-конструктор устанавливает время в 00:00 в вашем часовом поясе. Но во втором случае он инициализирует время относительно GMT +00.00