моментально isValid возвращает ложь, когда это должно быть правдой, и наоборот - PullRequest
0 голосов
/ 03 декабря 2018

Используя HTML, javascript и jQuery, я импортирую дату из MS Excel, используя "xlsx.full.min.js".Я установил для поля даты в MS Excel текст, чтобы MS Excel не менял свой формат при экспорте.После импорта я затем анализирую созданную таблицу для проверки каждого поля.Для проверки поля даты я использую:

var dateFormat = 'DD/MM/YYYY';
alert("$(this).text(): " + $(this).text());
alert(moment(moment($(this).text()).format(dateFormat),dateFormat,true).isValid());

Когда поле даты MS Excel содержит «13/12/2018», возвращается false.Если в поле даты MS Excel указано «13/12/2018», возвращается значение true.Оба эти значения отображаются в предупреждении, поэтому я знаю, что они передаются правильно.

Поскольку я установил формат даты "ДД / ММ / ГГГГ", почему этот формат не работает, и "ММ / ДД / ГГГГ"пройти?

1 Ответ

0 голосов
/ 03 декабря 2018

MomentJS преобразует дату из строки в свой объект перед выполнением операций над ним.Если формат не указан, он принимает форматы по умолчанию.Операция разбора объясняется здесь: https://momentjs.com/docs/#/parsing/string/

Итак, в вашем случае вы должны передать формат даты при создании объекта момента.Например:

var dateFormat = "DD/MM/YYYY";
moment("12/13/2018",dateFormat).isValid() //will return false
moment("13/12/2018",dateFormat).isValid() //will return true

Обновление:

MomentJS позволяет анализировать дату, даже если указанная дата содержит другие символы, кроме формата.Например, «1A / 2B / 2018» будет считаться действительной датой как «1/2/2018».

Введите, чтобы избежать этого, и проверьте формат и дату, чтобы точно соответствовать моменту объектадолжен быть передан дополнительный логический тип для включения строгого режима.

moment("1A/2B/2018", dateFormat).isValid() //will return true
moment("1A/2B/2018", dateFormat, true).isValid() //will return false
...