JQuery Validate (Диапазон дат)
Im, использующий плагин проверки jQuery, и задавался вопросом, есть ли способ проверить, была ли дата, введенная в поле, такой датой, как yyyy-mm-dd И дата была между 29 ноября 2010 года - 15 декабря 2010 года
Im довольно новый для jQuery, поэтому, если есть ответ, пожалуйста, отбросьте ответ как можно больше, чтобы я мог его преодолеть. Большое спасибо за любые/все предложения
Ответы
Ответ 1
Если вы хотите использовать функцию многократного использования, вы можете продлить ответы Эмили и Loneomeday, чтобы разрешить предоставление аргумента:
$.validator.addMethod('daterange', function(value, element, arg) {
// Same as above
var startDate = Date.parse(arg[0]),
endDate = Date.parse(arg[1]),
enteredDate = Date.parse(value);
// Same as below
}, $.validator.format("Please specify a date between {0} and {1}."))
См. source проверки jQuery range для примера.
Ответ 2
Я никогда не использовал плагин проверки, но просмотр API подсказывает, что что-то вроде этого может работать:
$.validator.addMethod('daterange', function(value, element) {
if (this.optional(element)) {
return true;
}
var startDate = Date.parse('2010-11-29'),
endDate = Date.parse('2010-12-15'),
enteredDate = Date.parse(value);
if (isNan(enteredDate)) {
return false;
}
return ((startDate <= enteredDate) && (enteredDate <= endDate));
});
Тогда вам, кажется, нужно добавить класс daterange
соответствующий элемент.
Ответ 3
lonesomeday ответ довольно близок, с несколькими настройками. Я бы закончил код следующим образом:
if(isNaN(enteredDate)) return false;
return ((startDate <= enteredDate) && (enteredDate <= endDate));
}, "Please specify a date between 2010-11-29 and 2010-12-15");
Это исправляет функцию isNaN, а также предоставляет сообщение об ошибках вашим пользователям, чтобы они знали, что вы ищете.
Ответ 4
Сделал пару небольших исправлений в коде Коннора.
В результате рабочий код:
$.validator.addMethod('daterange', function(value, element, arg) {
if (this.optional(element) && !value) {
return true;
}
var startDate = Date.parse(arg[0]),
endDate = Date.parse(arg[1]),
enteredDate = Date.parse(value);
if (isNaN(enteredDate)) {
return false;
}
return ( (isNaN(startDate) || (startDate <= enteredDate)) &&
(isNaN(endDate) || (enteredDate <= endDate)));
}, $.validator.format("Please specify a date between {0} and {1}."));
Затем используйте его следующим образом:
$("#some_date_input").rules("add",{daterange:['01/31/2001','01/31/2020']});
Ответ 5
Держи лошадей, ребята!:)
Не забывайте, что Date.parse не может работать должным образом с разными локалями, он анализирует только правильный формат даты.
Если вы используете разные форматы дат (специфичные для культуры) - лучше придерживаться обработки датпикера даты jquery.
Итак, предположим, что вы загрузили правильный объект jqery datepicker для конкретной культуры (например, jquery.ui.datepicker-nb-NO.js, где формат даты - DD.MM.yyyy и не обрабатывается Date.parse ) и инициализировал его, правильный подход:
$.validator.addMethod('dateRange', function (value, element, parameterValue) {
if (this.optional(element) && !value) {
return true;
}
var dateFormat = $(element).datepicker('option', 'dateFormat');
try {
var startDate = $.datepicker.parseDate(dateFormat, parameterValue[0]).getTime();
var endDate = $.datepicker.parseDate(dateFormat, parameterValue[1]).getTime();
var enteredDate = $.datepicker.parseDate(dateFormat, value).getTime();
return (startDate <= enteredDate) && (enteredDate <= endDate);
} catch (error) {
return true;
}
});
Я положил материал parseDate внутри блока try, потому что нет нормального способа выяснить, правильно ли проанализирована дата.