Это зависит от движка JavaScript.В Firefox даты после 1 января 10000 (год десять тысяч), по-видимому, считаются недействительными:
> new Date("9999")
Date 9999-01-01T00:00:00.000Z
> new Date("10000")
Invalid Date
В Chrome (который использует V8, так же, как Node.js) он отлично работает:
> new Date("10000")
Sat Jan 01 10000 00:00:00 GMT-0800 (Pacific Standard Time)
> new Date("12345")
Mon Jan 01 12345 00:00:00 GMT-0800 (Pacific Standard Time)
Итак, чтобы ответить на ваш вопрос: разные движки JavaScript имеют разные ограничения, связанные с тем, какая дата действительна, а какая нет, но в целом наличие только последовательности цифр в строке заставляет думать, что это 1 января этого года.(с поправкой на используемый часовой пояс):
> new Date("2019")
Mon Dec 31 2018 16:00:00 GMT-0800 (Pacific Standard Time)
Также обратите внимание на это.Chrome / Node.js:
> new Date("31")
Invalid Date
> new Date("32")
Thu Jan 01 2032 00:00:00 GMT-0800 (Pacific Standard Time)
Firefox:
> new Date("1000")
Date 1000-01-01T00:00:00.000Z
> new Date("999")
Invalid Date
Судя по всему, Firefox хочет, чтобы год имел ровно 4 цифры, тогда как Chrome / V8 более гибок.
Кроме того, похоже, что Chrome / V8 имеет разные логические даты разбора от "1"
до "12"
(используя их как месяцы), но это совершенно другая история.