подтвердить дату JavaScript - PullRequest
4 голосов
/ 17 августа 2011

Есть ли быстрый способ проверить правильность даты / времени в этом формате?Я бы предпочел не разбивать его на подстроки и перестраивать, если это возможно

"ГГГГ-ММ-ДД ЧЧ: ММ: СС"

Ответы [ 5 ]

6 голосов
/ 17 августа 2011

Вы можете проанализировать строку даты как строку ISO (преобразовав пробел в «T» и добавив часовой пояс Зулу, например, «2011-08-16T12:34:56Z»), а затем сравнить полученную строку ISO даты с исходной строкой ISO.

function isValidDateString(s) {
  try {
    var isoStr = (""+s).replace(/ /,'T') + "Z"
      , newStr = new Date(isoStr).toISOString();
    return isoStr.slice(0,19) == newStr.slice(0,19);
  } catch (e) {
    return false;
  }
}

Таким образом, если строка даты имеет недопустимый формат, то строка «Недопустимая дата» не будет равняться оригиналу, и если она должна была переместиться (например, если день был недействительным для месяца), то строковое значение проанализированного дата не будет равна исходной строке.

[Изменить]

Обратите внимание на изменения в примере кода, требуемые для исправления часового пояса.

0 голосов
/ 17 июня 2014

Я так и сделал, и все заработало

<html>
<head>
<title>valida data</title>
<script>
function valData(data){//dd/mm/aaaa

day = data.substring(0,2);
month = data.substring(3,5);
year = data.substring(6,10);

if( (month==01) || (month==03) || (month==05) || (month==07) || (month==08) || (month==10) || (month==12) )    {//months 31 days
if( (day < 01) || (day > 31) ){
alert('invalid date');
}
} else

if( (month==04) || (month==06) || (month==09) || (month==11) ){//months 30 days
if( (day < 01) || (day > 30) ){
alert('invalid date');
}
} else

if( (month==02) ){//February and leap year
if( (year % 4 == 0) && ( (year % 100 != 0) || (year % 400 == 0) ) ){
if( (day < 01) || (day > 29) ){
    alert('invalid date');
}
} else {
if( (day < 01) || (day > 28) ){
    alert('invalid date');
}
}
}

}
</script>
</head>
<body>
<form>
<input type="text" name="data" id="data" onBlur="return valData(this.value)" />
</form>
</body>
</html>
0 голосов
/ 20 июня 2012

Следующий код ниже проверит, является ли введенная дата действительной датой.

На первый взгляд она выглядит большой, но в основном это комментарии.

Не требует подстроки нет регулярного выражения.

Способ работы JavaScript заключается в том, что если вы разбиваете объект Date с недопустимой датой (04/32/2010) на его общие миллисекунды, а затем создаете еще один объект Date с этими миллисекундами, онне будет создавать объект Date, который отображает неправильную дату (04/32/2010), он будет компенсировать и создавать надлежащие Date (05/01/2010).

Так просто, если вводотличается от нового Date объекта, , тогда дата недействительна.

http://jsfiddle.net/dceast/vmHjN/ - Вот пример этого на JSFiddle.

var compareDate, checkDates = false;
var validateObject = {
    init: function(year, month, day) {
        return this.compareDate.init(year, month, day);
    },
    compareDate: {
        init: function(year, month, day) {
            var isValid = false;
            // Compensate for zero based index, if month was not
            // subtracted from one 0 === Jan, 1 === Feb, 2 === Mar
            month -= 1;

            // Create a new date object with the selected
            // year, month, and day values and retrieve the
            // milliseconds from it.
            var mSeconds = (new Date(year, month, day)).getTime();
            var objDate = new Date();

            // Set the time of the object to the milliseconds 
            // retrieved from the original date. This will
            // convert it to a valid date.
            objDate.setTime(mSeconds);

            // Compare if the date has changed, if it has then
            // the date is not valid 
            if (objDate.getFullYear() === year &&
                objDate.getMonth() === month &&
                objDate.getDate() === day) 
            {
                isValid = true;
            }
            return isValid;
        }
    }
};
0 голосов
/ 17 августа 2011

Вы можете использовать это регулярное выражение .

/^([0-9]{4})-([0-1][0-9])-([0-3][0-9])\s([0-1][0-9]|[2][0-3]):([0-5][0-9]):([0-5][0-9])$/.test("2007-08-04 18:01:01"); //true
/^([0-9]{4})-([0-1][0-9])-([0-3][0-9])\s([0-1][0-9]|[2][0-3]):([0-5][0-9]):([0-5][0-9])$/.test("2007-08-04 18:01:0"); //false
0 голосов
/ 17 августа 2011

Попробуйте использовать регулярное выражение, например this . Изменить: Вот строка, с которой вы хотите сопоставить:

^([1-3][0-9]{3,3})-(0?[1-9]|1[0-2])-(0?[1-9]|[1-2][1-9]|3[0-1])\s([0-1][0-9]|2[0-4]):([0-5][0-9]):([0-5][0-9])$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...