Ответ 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.