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, потому что нет нормального способа выяснить, правильно ли проанализирована дата.