Ниже приводится сценарий:
У меня String
дата и формат даты разные. Пример:
date: 2016-10-19
dateFormat: «ДД-ММ-ГГГГ».
Мне нужно проверить, действительна ли эта дата.
Я пробовал следить за вещами
var d = moment("2016-10-19",dateFormat);
d.isValid()
возвращается false
каждый раз. Разве Moment.js не анализирует дату в заданном формате?
Затем я попытался DD-MM-YYYY
сначала отформатировать дату, а затем передать ее в Moment.js:
var d = moment("2016-10-19").format(dateFormat);
var date = moment(d, dateFormat);
Теперь date.isValid()
дает мне желаемый результат, но здесь объект даты Moment.js создается дважды. Как мне этого избежать? Есть ли лучшее решение?
К вашему сведению, мне не разрешено изменять dateFormat
.
javascript
date
datetime
momentjs
Ganesh
источник
источник
Ответы:
Смогла найти решение. Поскольку дата, которую я получаю, находится в формате ISO, ее будет подтверждать только указание даты до момента, нет необходимости передавать dateFormat.
И тогда
date.isValid()
дает желаемый результат.источник
var a = moment('12345'); a.isValid() // is true
это не удается, потому что момент вернется к объекту даты по умолчанию, если он не может проанализировать дату. И объект даты по умолчанию всегда будет возвращать дату (только не ту, которую вы хотите.)moment('02').isValid() === true
, так что вы можете быть осторожны с этимmoment('abcde 1').isValid() === true
var date = moment('2016-10-19', 'DD-MM-YYYY', true);
Вы должны добавить третий аргумент при вызове,
moment
который обеспечивает строгий синтаксический анализ. Вот соответствующая часть текущей документации http://momentjs.com/docs/#/parsing/string-format/ Это ближе к концу раздела.источник
Вот и все: рабочая скрипка
источник
2016-10-19
?var d = moment("2016-10-19",dateFormat);
?Я использую момент вместе с новой датой для обработки случаев
undefined
значений данных:const date = moment(new Date("2016-10-19"));
из-за:
moment(undefined).isValid() == true
где как лучше:
moment(new Date(undefined)).isValid() == false
источник
Я только что нашел действительно испорченный случай.
источник
moment('Decimal128', 'YYYY-MM-DD', true).isValid() // false
, Используйте строгий режим :) momentjs.com/guides/#/parsing/strict-modeКак проверить, является ли строка действительной датой с помощью Moment, когда дата и формат даты различаются
Извините, но действительно ли какое-либо из решений в этой ветке отвечает на заданный вопрос?
Следующее работает для меня ...
Но, честно говоря, не понимаю, почему
moment.isDate()
( как описано в документации ) принимает только объект. На мой взгляд, должен также поддерживать строку.источник
источник
Если дата действительна, то
getTime()
всегда будет равно самому себе.источник
Попробуй это. Это нехорошо, но это будет работать до тех пор, пока ввод будет в постоянном формате с помощью средства выбора даты.
В этом примере это badDate, исходящий от вашего сборщика
https://jsfiddle.net/xs8tvox9/
источник