Разница между '01' и '1' в дате JavaScript
В чем разница между датами "2015-10-01" и "2015-10-1" в JavaScript?
new Date('2015-10-1')
Это возвращает 'Thu Oct 01 2015 00:00:00 GMT-0300'
new Date('2015-10-01')
Возвращает 'Wed Sep 30 2015 21:00:00 GMT-0300'
Ответы
Ответ 1
То, что я вижу после локального выполнения,
- Дата в локальном часовом поясе
- Дата в UTC
В соответствии с MDN docs Date.parse
будет считать дату UTC-формата, если она имеет завершенную DD
иначе она будет принимать в формате локального часового пояса.
Подробное объяснение изменения месяца: (комментарии)
new Date('2015-10-1')
, когда вы выполняете этот вывод, выдается "Thu Oct 01 2015 00:00:00 GMT-0300". то есть его местное время, и это GMT -3hrs.
Но когда вы выполняете new Date('2015-10-01')
, вывод будет "Ср. 30 сентября 2015 21:00:00 GMT-0300", который находится в UTC. т.е. 3 часа минус с вашего локального времени.
Итак, это 1 октября полуночи -3 часа, что является днем предыдущего дня. т.е. 30 сентября 21 ч.
Ответ 2
Из документация:
new Date(dateString)
DateString
Строка, представляющая дату RFC2822 или ISO 8601 (могут использоваться другие форматы, но результаты могут быть неожиданными).
'2015-10-1'
не является ни одним из поддерживаемых форматов и, как и было обещано, вы получаете неожиданные результаты (тогда как '2015-10-01'
является допустимой датой ISO 8601).
Ответ 3
Это связано с тем, что JavaScript ожидает определенное количество символов в строке даты.
Здесь у вас два формата:
(YYYY-MM-DD)
и
(YYYY-MM-D)
Я удивлен, что второй возвращает что-нибудь вообще, поскольку он, похоже, не соответствует какому-либо действительному формату JavaScript Date String. Если он возвращается, как вы говорите, то JavaScript, скорее всего, интерпретирует его как нечто иное, чем Years, Months and Days.