Подтвердить что ты не робот

Как проверить строку - это действительная дата или не использовать момент?

Я бы хотел проверить, действительно ли введена дата и время.

Можно ли это сделать с моментом, поскольку проверка даты и времени с javascript кажется кошмаром. (потратили на это часы).

Данные теста выглядят следующим образом.

Invalid

invalid = ""
invalid = " "
invalid = "x"
invalid = "1/1"
invalid = "30/2/2015"
invalid = "2/30/2015"

Действителен

isvalid = "1/12/2015"
isvalid = "1/12/2015 1:00 PM";

Попробовали различные методы javascript с провалом часов.

Я думал, что у этого момента есть что-то для этого. Поэтому пробовал следующее, все из которых не работают, потому что я не думаю, что этот момент работает так.

var valid = moment(input).isDate()
var valid = moment().isDate(input)

Мой формат времени - "dd/mm/yyyy"

4b9b3361

Ответ 1

Да, вы могли бы использовать momentjs для его анализа и сравнения с строкой

function isValidDate(str) {
  var d = moment(str,'D/M/YYYY');
  if(d == null || !d.isValid()) return false;

  return str.indexOf(d.format('D/M/YYYY')) >= 0 
      || str.indexOf(d.format('DD/MM/YYYY')) >= 0
      || str.indexOf(d.format('D/M/YY')) >= 0 
      || str.indexOf(d.format('DD/MM/YY')) >= 0;
}

Тестовый код

tests = ['',' ','x','1/1','1/12/2015','1/12/2015 1:00 PM']
for(var z in tests) {
  var test = tests[z];
  console.log('"' + test + '" ' + isValidDate(test));
}

Выход

 "" false
 " " false
 "x" false
 "1/1" false
 "1/12/2015" true
 "1/12/2015 1:00 PM" true

Ответ 2

Момент имеет функцию под названием isValid.

Вы хотите использовать эту функцию вместе с целевым форматом даты и параметром строгого синтаксического анализа в true (иначе ваша проверка может быть непоследовательной), чтобы делегировать библиотеке все необходимые проверки (например, високосные годы):

var dateFormat = "DD/MM/YYYY";
moment("28/02/2011", dateFormat, true).isValid(); // return true
moment("29/02/2011", dateFormat, true).isValid(); // return false: February 29th of 2011 does not exist, because 2011 is not a leap year

Ответ 3

Вы можете использовать это.

if (startDate == null || !startDate.isValid()) {return false;}

Ответ 4

Вы можете использовать функцию Date.parse().

Здесь приведены сведения о том, как использовать.