При передаче строки moment
проверяет, является ли это допустимым форматом даты, и если нет, то возвращается к встроенному методу javascript Date.parse()
.
Документы moment.js говорят:
При создании момента из строки мы сначала проверяем, соответствует ли строка известным форматам ISO 8601, затем проверяем, соответствует ли строкаRFC 2822 Формат даты и времени перед переходом к новой дате (строке), если известный формат не найден.
Date.parse
не распознает ничего полезного в вашей строке, пока не встретит 10
;это бросает остальное.Предполагается формат даты по умолчанию, который будет зависеть от вашего местоположения и языка.В моем собственном случае здесь, в США, формат MM/DD
.В результате строка анализируется с датой 1 октября (10-й месяц, по умолчанию 1-й день не указан).И затем (я подозреваю, что по причине 2000 года) это предполагает год 2001, поскольку год не указан.
Мы получаем то же поведение из встроенных в javascript методов Date
:
new Date(Date.parse('User has logged in to more than 10.'))
// Mon Oct 01 2001 00:00:00 GMT-0400 (EDT) <- As printed from Michigan.
Во втором случае вы попытались завершить строку с 10 a
вместо 10 .
, и вы заметите то же поведение (invalid date
), если передадите то же самое во встроенные методы Date
.