• Как проверить дату?

    Я пытаюсь проверить, чтобы убедиться, что дата верна в том смысле, что если кто-то входит 2/30/2011 тогда это должно быть неправильно.

    Как я могу сделать это с какой даты?

  • Ответы

  • Один простой способ проверить строку даты преобразовать в объект date и проверить, что, например,

    // Expect input as d/m/y function isValidDate(s) {   var bits = s.split('/');   var d = new Date(bits[2], bits[1] - 1, bits[0]);   return d && (d.getMonth() + 1) == bits[1] && d.getDate() == Number(bits[0]); }  

    Нужно проверить только 2 из 3-х частей даты. Вы также можете проверить биты строки даты:

    function isValidDate2(s) {   var bits = s.split('/');   var y = bits[2], m  = bits[1], d = bits[0];   // Assume not leap year by default (note zero index for Jan)   var daysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];    // If evenly divisible by 4 and not evenly divisible by 100,   // or is evenly divisible by 400, then a leap year   if ( (!(y % 4) && y % 100) || !(y % 400)) {     daysInMonth[1] = 29;   }   return d <= daysInMonth[--m] } 

    Не первый isValidDate функция(ы), предложенные RobG будет работать на вход строку '1/2/'? Я думаю нет, потому что год еще не утверждена ;(

    Мое предложение заключается в использовании усовершенствованная версия этой функции:

    //input in ISO format: yyyy-MM-dd function DatePicker_IsValidDate(input) {         var bits = input.split('-');         var d = new Date(bits[0], bits[1] - 1, bits[2]);         return d.getFullYear() == bits[0] && (d.getMonth() + 1) == bits[1] && d.getDate() == Number(bits[2]); } 

    Такое решение не очевидно, дату проверки, такие как убедившись, Дата части являются целыми числами или, что дата деталями соблюдать очевидные проверки, такие как день быть больше, чем 0 и менее чем в 32. Это решение предполагает, что у вас уже есть все три части даты (Год, месяц, день) и что каждый уже проходит очевидных проверок. Учитывая эти допущения, этот метод должен работать для просто проверка, если Дата не существует.

    Например 29 февраля 2009 года-это не Дата, а 29 февраля 2008 г. При создании нового объекта date, такие как 29 февраля 2009 г. посмотрите, что происходит (помните, что месяцы начинаются с нуля на JavaScript):

    console.log(new Date(2009, 1, 29)); 

    Выше линейные выходы: Вс Мар 01 2009 00:00:00 по GMT-0800 (PST-файл)

    Обратите внимание, как дата просто получает свернутый в первый день следующего месяца. Если у вас есть другой, очевидно, проверки на месте, эта информация может использоваться, чтобы определить, если Дата реальная следующей функцией (Эта функция позволяет для ненулевой месяцев для более удобного ввода):

    var isActualDate = function (month, day, year) {     var tempDate = new Date(year, --month, day);     return month === tempDate.getMonth(); }; 

    Это не полное решение, а не принимать как i18n во внимание, но это может быть сделано более устойчивым.

    var isDate_ = function(input) {         var status = false;         if (!input || input.length <= 0) {           status = false;         } else {           var result = new Date(input);           if (result == 'Invalid Date') {             status = false;           } else {             status = true;           }         }         return status;       } 

    эта функция возвращает значение bool, является ли данный ввод является допустимой датой или нет. экс:

    if(isDate_(var_date)) {   // statements if the date is valid } else {   // statements if not valid } 
    function isValidDate(year, month, day) {         var d = new Date(year, month - 1, day, 0, 0, 0, 0);         return (!isNaN(d) && (d.getDate() == day && d.getMonth() + 1 == month && d.getYear() == year));     }