Почему new Date('2017-01-01') и new Date('2017-1-1') выдают разное время?
Как парсится new Date(dateString) в Chrome?
[
new Date("2017-01-01"),
new Date("2017-01-1"),
new Date("2017-1-1"),
new Date("2017-1-01")
].forEach(date => console.log(date));
What is the difference between new Date(“2017-01-01”) and new Date(“2017-1-1”)?
"2017-01-01" следует ISO стандарту, и соответствует UTC времени.
Строка любого другого формата, парсится как локальное время в Chrome1.
В общем случае(в других браузерах), это поведение зависит от реализации.
1 Соответствующий исходный код в Chromium
Парсинг даты в Chromium следует правилам стандарта ES5, кроме следующих исключений:
: - время. Оно добавляется в TimeComposer. Число с :: означает 0 секунд. Число с . - также время, за которым должны идти миллисекунды. Любое другое число - компонент даты, добавляется в DateComposer. DayComposer.(+|-)(hhmm|hh:). +/- или несогласованной ) после прочитанного числа(перед первым числом допустим любой мусор). "1970-01-01" будет в UTC, а не в локальной таймзоне.Для начала, 2017-01-01 парсится в UTC потому что это строка "даты", а не "дата-время". Она также соответствует ES5 определению строки "даты".
Если добавить время - она будет распознано в локальном часовом поясе по ISO стандарту.
Примеры:
2017-01-01 - Янв 1, 2017 в UTC2017-01-01T00:00 - Янв 1, 2017 локальное время2017-1-1 - Янв 1, 2017 локальное время2017-(hello)01-01 - Янв 1, 2017 локальное времямай 2017-01-01 - Янв 1, 2017 локальное времяmayoooo 2017-01-01 - Янв 1, 2017 локальное время"jan2017feb-mar01apr-may01jun" - Июн 1, 2017 локальное времяОтвет на enSO
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости