Если вы передаете строку конструктору Date
, строка должна быть в формате, распознаваемом методом parse ( метки времени, соответствующие IETF RFC 1123 ) (источник: MDC ).Все остальное приводит к конкретному поведению реализации и будет отличаться в разных браузерах.
Я предлагаю вам вообще не использовать строки и использовать либо три числа, представляющие год, месяц и день (учтите, что числа месяца начинаются с 0 (=Январь)), или используйте одно число, количество миллисекунд с 1 января 1970 года 00:00:00 UTC.
ОБНОВЛЕНИЕ: с учетом вашего примера,
var a = new Date('0123');
console.log(a);
выводит
Fri Jan 01 0123 01:00:00 GMT+0100 (CET)
, поэтому Firefox, очевидно, распознает '0123'
как номер года.
ОБНОВЛЕНИЕ 2: Я думаю MDCописание Date.parse
содержит ответ на ваш вопрос:
Начиная с JavaScript 1.8.5, также может быть проанализировано подмножество строк даты в формате ISO 8601 .
На странице ISO 8601 указывается (раздел «Форматы»):
Год:
ГГГГ (например, 1997)
Год и месяц:
ГГГГ-ММ (например, 1997-07)
Полная дата:
ГГГГ-ММ-ДД (например, 1997-07-16)
Таким образом, полагаясь на ISO 8601, строка, содержащая только четыре числа, будет распознаваться как год.