Проверьте, является ли строка значением даты - PullRequest
171 голосов
/ 16 сентября 2011

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

Например, у меня есть значения 10-11-2009, 10/11/2009, 2009-11-10T07:00:00+0000, которые все должны распознаваться как значения даты, и значения 200, 10, 350, которые не должны распознаваться как значение даты. Какой самый простой способ проверить это, если это вообще возможно? Поскольку временные метки также будут разрешены.

Ответы [ 20 ]

1 голос
/ 02 августа 2018

Я знаю, что это старый вопрос, но я столкнулся с той же проблемой и увидел, что ни один из ответов не работал должным образом - в частности, отсеивание чисел (1 200 345 и т. Вот довольно необычный метод, о котором я мог подумать, и он, кажется, работает. Пожалуйста, укажите, есть ли случаи, когда это не удастся.

if(sDate.toString() == parseInt(sDate).toString()) return false;

Это строка для удаления чисел. Таким образом, вся функция может выглядеть так:

function isDate(sDate) {  
  if(sDate.toString() == parseInt(sDate).toString()) return false; 
  var tryDate = new Date(sDate);
  return (tryDate && tryDate.toString() != "NaN" && tryDate != "Invalid Date");  
}

console.log("100", isDate(100));
console.log("234", isDate("234"));
console.log("hello", isDate("hello"));
console.log("25 Feb 2018", isDate("25 Feb 2018"));
console.log("2009-11-10T07:00:00+0000", isDate("2009-11-10T07:00:00+0000"));
1 голос
/ 29 июня 2018

Дата может быть подтверждена с помощью следующего ответа

 var year=2019;
 var month=2;
 var date=31;
 var d = new Date(year, month - 1, date);
 if (d.getFullYear() != year
    || d.getMonth() != (month - 1)
    || d.getDate() != date) {
alert("invalid date");
return false;
}
1 голос
/ 29 ноября 2016

Эта вызываемая функция работает отлично, возвращает true для правильной даты. Обязательно звоните, используя дату в формате ISO (гггг-мм-дд или гггг / мм / дд):

function validateDate(isoDate) {

    if (isNaN(Date.parse(isoDate))) {
        return false;
    } else {
        if (isoDate != (new Date(isoDate)).toISOString().substr(0,10)) {
            return false;
        }
    }
    return true;
}
0 голосов
/ 23 августа 2018

Попробуйте это

<input type="text" id="StartDay" value="2018/01/01" maxlength="10" />

$('#StartDay').change(function () {
    if ( ($('#StartDay').val().length == 10 && new Date($('#StartDay').val()) >= new Date("2018/01/01") &&
        (new Date($('#StartDay').val()) !== "Invalid Date") && !isNaN(new Date($('#StartDay').val()))) == false) {
     .....
    }
})
0 голосов
/ 22 ноября 2016

Вот как я это делаю. Это не будет охватывать все форматы. Вы должны настроить соответственно. У меня есть контроль над форматом, поэтому он работает для меня

function isValidDate(s) {
            var dt = "";
            var bits = [];
            if (s && s.length >= 6) {
                if (s.indexOf("/") > -1) {
                    bits = s.split("/");
                }
                else if (s.indexOf("-") > -1) {
                    bits = s.split("-");
                }
                else if (s.indexOf(".") > -1) {
                    bits = s.split(".");
                }
                try {
                    dt = new Date(bits[2], bits[0] - 1, bits[1]);
                } catch (e) {
                    return false;
                }
                return (dt.getMonth() + 1) === parseInt(bits[0]);
            } else {
                return false;
            }
        }
0 голосов
/ 18 августа 2016
SimpleDateFormat sdf = new SimpleDateFormat(dateFromat);
sdf.setLenient(false);

По умолчанию установлено значение TRUE.Так что даже строки неправильного формата возвращают хорошие значения.

Я использовал это примерно так:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
formatter.setLenient(false);
String value = "1990/13/23"; 

try {
      Date date = formatter.parse(value);
      System.out.println(date);
    }catch (ParseException e) 
  {
    System.out.println("its bad");
  }
0 голосов
/ 11 сентября 2014

Это работает:

var isDate = function(date) {
    return ((new Date(date)).toString() !== "Invalid Date") ? true : false;         
}
0 голосов
/ 16 сентября 2011

Попробуйте это:

if (var date = new Date(yourDateString)) {
    // if you get here then you have a valid date       
}
0 голосов
/ 01 июля 2015

Попробовав все ответы, перечисленные выше, я получил следующее:

var checkDateValue = function(date) {
    return date && (!(new Date(date) == "Invalid Date") && !isNaN(new Date(date)));
};

Обратите внимание, что new Date(date) !== "Invalid Date" - это всегда true.Надеюсь, это поможет.

0 голосов
/ 03 февраля 2015

Можно ли проверить, доступна ли функция, связанная с датой, для объекта, чтобы определить, является ли он объектом Date или нет?

подобно

var l = new Date();
var isDate = (l.getDate !== undefined) ? true; false;
...