Есть функция isDate
в jQuery?Как определить, соответствует ли данная строка дате?
Он должен вернуть true
, если ввод - это дата, и false
в противном случае.
Есть функция isDate
в jQuery?Как определить, соответствует ли данная строка дате?
Он должен вернуть true
, если ввод - это дата, и false
в противном случае.
В зависимости от того, как вы пытаетесь осуществить это, вы можете быть в состоянии использовать the "validate" jQuery plugin с the date
option набором.
это не подтверждает европейский формат даты (дд/ММ/гггг) – armen
Date.parse будет PRB-то вам, без необходимости JQuery:
http://www.w3schools.com/jsref/jsref_parse.asp
Выше удалены после того, как какая-то душа указал, как основной parseDate на самом деле.
Существует также метод «parseDate» в плагин JQuery UI Datepicker:
var d = Date.parse ("13/13/2010"); ДАЖЕ 1294857000000 :) ТАК ЭТО НЕ БУДЕТ ИСПОЛЬЗОВАНО –
О, ничего себе, это отстой! Я думал, что это правильно сказал вам, была ли дата действительной. –
В ядре jQuery нет встроенных функций даты, и на самом деле это не делает ничего, чтобы помочь с датами, поэтому на нем не так много библиотек (если только они не выбрали дату, и т.д). There are several JavaScript date libraries available though, чтобы упростить работу с ними.
Я не могу точно ответить, что лучше ... это зависит от того, как они входят в него и с какой культурой вы имеете дело, помните, что разные культуры используются, чтобы видеть их даты в другом формате, так как быстрый пример, MM/DD/YYYY
vs YYYY/MM/DD
(или десятки других).
Лучший способ получить ввод данных пользователя - это выбор даты, который предоставляет только действительные даты. Это может быть сделано с помощью строки, но вы можете уничтожить своих пользователей, потребовав, чтобы они использовали ваш выбранный формат.
Необходимо указать в своем валидаторе, если даты предшествуют месяцам.
Для этого используется второй аргумент. Без второго аргумента он использует заказ по умолчанию для компьютера.
// computer default date format order:
Date.ddmm= (function(){
return Date.parse('2/6/2009')> Date.parse('6/2/2009');
})()
позволяют названия месяцев, а также цифры: '21 января 2000' или „Октябрь 21,1975“
function validay(str, order){
if(order== undefined) order= Date.ddmm? 0: 1;
var day, month, D= Date.parse(str);
if(D){
str= str.split(/\W+/);
// check for a month name first:
if(/\D/.test(str[0])) day= str[1];
else if (/\D/.test(str[1])) day= str[0];
else{
day= str[order];
month= order? 0: 1;
month= parseInt(str[month], 10) || 13;
}
try{
D= new Date(D);
if(D.getDate()== parseInt(day, 10)){
if(!month || D.getMonth()== month-1) return D;
}
}
catch(er){}
}
return false;
}
Если вы не хотите использовать JQuery плагин я нашел функцию по адресу:
http://www.codetoad.com/forum/17_10053.asp
работает для меня. Остальные, которые я нашел, работают не так хорошо.
ОБНОВЛЕНО:
Из кешированной версии страницы по адресу: http://web.archive.org/web/20120228171226/http://www.codetoad.com/forum/17_10053.asp
// ******************************************************************
// This function accepts a string variable and verifies if it is a
// proper date or not. It validates format matching either
// mm-dd-yyyy or mm/dd/yyyy. Then it checks to make sure the month
// has the proper number of days, based on which month it is.
// The function returns true if a valid date, false if not.
// ******************************************************************
function isDate(dateStr) {
var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
var matchArray = dateStr.match(datePat); // is the format ok?
if (matchArray == null) {
alert("Please enter date as either mm/dd/yyyy or mm-dd-yyyy.");
return false;
}
month = matchArray[1]; // [email protected] date into variables
day = matchArray[3];
year = matchArray[5];
if (month < 1 || month > 12) { // check month range
alert("Month must be between 1 and 12.");
return false;
}
if (day < 1 || day > 31) {
alert("Day must be between 1 and 31.");
return false;
}
if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31) {
alert("Month " + month + " doesn`t have 31 days!")
return false;
}
if (month == 2) { // check for february 29th
var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
if (day > 29 || (day == 29 && !isleap)) {
alert("February " + year + " doesn`t have " + day + " days!");
return false;
}
}
return true; // date is valid
}
Ссылка не работает. –
Если вы не хотите иметь дело с внешними библиотеками, простой Javascript только раствор:
function isDate(val) {
var d = new Date(val);
return !isNaN(d.valueOf());
}
ОБНОВЛЕНИЕ: !! Major Caveat !!
@BarryPicker поднимает хороший момент в комментариях. JavaScript беззвучно преобразует 29 февраля - 1 марта за все непиковые годы. Такое поведение, по-видимому, ограничено только днями до 31 года (например, 32 марта не конвертируется в 1 апреля, но 31 июня конвертируется в 1 июля). В зависимости от ситуации, это может быть ограничением вы можете принять, но вы должны знать об этом:
>>> new Date('2/29/2014')
Sat Mar 01 2014 00:00:00 GMT-0500 (Eastern Standard Time)
>>> new Date('3/32/2014')
Invalid Date
>>> new Date('2/29/2015')
Sun Mar 01 2015 00:00:00 GMT-0500 (Eastern Standard Time)
>>> isDate('2/29/2014')
true // <-- no it's not true! 2/29/2014 is not a valid date!
>>> isDate('6/31/2015')
true // <-- not true again! Apparently, the crux of the problem is that it
// allows the day count to reach "31" regardless of the month..
для asp.net, если вы используете элемент управления CustomValidator, который вы можете вызвать из свойства ClientValidationFunction, эта функция должна быть более или менее: функция IsDate (отправитель, args) { 10 var d = new Дата ($ ('# tbBirthDate «) .val()); args.IsValid =! IsNaN (d.valueOf()); возвращение; } – juanytuweb
Этот метод не работает правильно для 29/24/2014 - не было високосного года на 2014 год.Фактически, этот метод говорит, что 2/30/2014 действителен - и это никогда не будет действительным. При использовании 2/30/2014 в качестве ввода переменной 'd' присваивается значение 2 марта 2014 года в первой строке вашей функции, поэтому происходит некоторое неявное преобразование ... – barrypicker
@barrypicker: Спасибо, вверх. Я обновил свой ответ соответственно. – mwolfe02
Я пришел к этому решению, сделать более сложным, как я использую европейский формат и Javascript явно американская!
function CheckDate()
{
var D = document.getElementById('FlightDate').value;
var values = D.split("-")
var newD = values [1] + "/" + values [0] + "/" + values[2]
var d = new Date(newD);
if(d == 'Invalid Date')document.getElementById('FlightDate').value = "";
}
Беспощадно, но выполняет эту работу. Если ваши пользователи америки и положили день посередине (что я никогда не пойму!), То вы можете оставить раздел и создать новый D.
Вполне вероятно, что я могу переопределить американское поведение по умолчанию в JS, установив культуру или некоторые из них, но моя целевая аудитория - исключительно европейская, так что было проще выстроить ее таким образом. (. О, это работает в Chrome, не проверял его на что-нибудь еще)
Не работает в ie! (т. е. преобразует его в совершенно другую действительную дату!) Я собирался преобразовать функцию C, которую я написал для встроенного программного обеспечения, которое проверяет день в соответствии с месяцем, но я думал, что мне нужно было делать такие вещи низкого уровня в моей дневной работе ! У них есть дампикер, я проверю его на стороне сервера с помощью VB isdate. Работа выполнена. – user2981217
простой способ в JavaScript является:
function isDate(dateVal) {
var d = new Date(dateVal);
return d.toString() === 'Invalid Date'? false: true;
}
Проблема заключается в том, что ввод в 31 февраля возвращает действительную дату в JavaScript. Введите год, месяц и день, превратите его в дату и посмотрите, соответствует ли эта дата тому, что вы вводили, а не в какой-то день в марте.
function isDate(y, m, d) {
var a = new Date(y, m-1, d);
// subtract 1 from the month since .getMonth() is zero-indexed.
if (a.getFullYear() == y && a.getMonth() == m-1 && a.getDate() == d) {
return true;
} else {
return false;
}
}
Технически это ваниль JavaScript, так как JQuery не действительно расширить на родной объект Date.
chk this out: http://docs.jquery.com/Plugins/Validation/Methods/date http://stackoverflow.com/questions/511439/custom-date-format-with-jquery-validation-plugin – jknair