Момент преобразования цифры в дату - PullRequest
0 голосов
/ 21 мая 2018

Пытаясь понять, как moment.js конвертирует строку в дату, я отскочил в эту проблему.

let date = "User has logged in to more than 10 .";
console.log(moment(date)); //output date

let invalid = "User has logged in to more than 10 a";
console.log(moment(invalid)); //output invalid date
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.js
"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-range/2.2.0/moment-range.js"></script>

Может кто-нибудь объяснить это мне ??

CodePen ссылка

1 Ответ

0 голосов
/ 21 мая 2018

При передаче строки 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.

...