2013-06-14 4 views
3

У меня есть требование, где у меня будет 2 поля даты (to, from) и необходимо, чтобы проверить их:JQuery проверки даты - формат и диапазон

  • являются ли они мм Формат/дд/гггг
  • обе даты в определенном диапазоне
  • как название to всегда должно быть больше, чем from
  • оба поля становятся обязательными, как только я вхожу любой один из этих

, что будет лучший способ реализовать то же самое, я использую Validation JQuery API

Примечание: Я прочитал о проверке формата на некоторые ссылки, как jQuery Date Validation (YYYY-MM-DD) но это не делает того, чтобы его действительное дата я могу закончить ввод что-то вроде 02/31/2999

я попытался

jQuery.validator.addMethod("DateFormat", function(value, element) { 
    var date_regex = /^(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])\/(19|20)\d{2}$/ ; 
    var values = value.split("/"); 
    return this.optional(element) || (value.test(date_regex) && (new Date(values[2], values[0], values[1]))); 
}); 

ответ

2

Мы обработали в значительной степени именно эту проблему. Что вам нужно сделать, так это создать ряд правил проверки. Во-первых, вы даете датам какие-то соответствующие атрибуты класса - «fromDate» и «toDate», скажем.

  • Один, который использует регулярное выражение, чтобы убедиться, что они находятся в нужном формате
  • один, что дата-преобразует, что использование объектов JavaScript Date, и убеждается, что они находятся в нужном диапазоне.
  • один для с даты, которая знает, как найти на сегодняшний день (как правило, обрабатывается, перейдя на уровень или два, а затем запустить .find('input.toDate')) или похожий на него, и сравнивает их.
  • Другими, обратное, для на сегодняшний день.
  • One, которая возвращает истину, если оба пусты, но ложь, если одна пустая, а другая полная

Затем назначьте соответствующие правила для соответствующих классов с jQuery.validate.addClassRules().

Поместить все этого кода, прежде чем вы установите u p ваш валидатор в рассматриваемой форме, и он должен работать нормально. Синтаксис остается как упражнение для читателя.

+0

я сделал пытался несколько решений, пожалуйста, проверьте обновленные вопросы. Все еще не удается найти полный метод доказательства, чтобы проверить действительную дату в методе mm/dd/yyyy. любая помощь pls – Varun

+0

Если у вас возникли проблемы с проблемой 31 февраля, использование объекта Date() javascript все же помогает. После того, как вы проверили грубую проверку с вашим регулярным выражением (как указано выше), вы бросаете его в конструктор даты. Затем вы задаете дату месяца (помните, что дни и месяцы основаны на 0 в объекте Date - делает это немного сложнее, но по-прежнему выполнимо) и сравнивайте его с печатным месяцем на дату. если вы получите «feb 31» или подобное, конструктор Date заставит его перевернуться в следующий месяц, и месяцы не будут правильно выстраиваться в линию. Если у вас есть другие проблемы, пожалуйста, объясните, пожалуйста, mroe. –

0

добавлены followign методы проверки

// jquery validation method to validate date format 
jQuery.validator.addMethod("DateFormat", function(value, element) { 
    var date_regex = /^(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])\/(19|20)\d{2}$/ ; 
    var comp = value.split('/'); 
    var m = parseInt(comp[0], 10); 
    var d = parseInt(comp[1], 10); 
    var y = parseInt(comp[2], 10); 
    var date = new Date(y,m,d); 
    return this.optional(element) || (date_regex.test(value) && date.getFullYear() == y && date.getMonth() == m && date.getDate() == d); 
}); 
//jquery validation method to validate date range 
jQuery.validator.addMethod("DateToFrom", function(value, element, arg0, arg1) { 
    var comp = value.split('/'); 
    var m = parseInt(comp[0], 10); 
    var d = parseInt(comp[1], 10); 
    var y = parseInt(comp[2], 10); 
    var currentEltdate = new Date(y,m,d); 

    comp = $("#"+arg0).val().split('/'); 
    m = parseInt(comp[0], 10); 
    d = parseInt(comp[1], 10); 
    y = parseInt(comp[2], 10); 
    var otherEltDate = new Date(y,m,d); 

    var lowerDate, upperDate; 
    if(arg1 == true){//current element should be lower date 
     lowerDate = currentEltdate; 
     upperDate = otherEltDate; 
    }else{ 
     lowerDate = otherEltDate; 
     upperDate = currentEltdate; 
    } 
    return this.optional(element) || (lowerDate <= upperDate); 
}); 
// jquery validation method to validate date range 
jQuery.validator.addMethod("DateRange", function(value, element, arg0, arg1) { 
    var comp = arg0.split('/'); 
    var m = parseInt(comp[0], 10); 
    var d = parseInt(comp[1], 10); 
    var y = parseInt(comp[2], 10); 
    var startDate = new Date(y,m,d); 

    comp = arg1.split('/'); 
    m = parseInt(comp[0], 10); 
    d = parseInt(comp[1], 10); 
    y = parseInt(comp[2], 10); 
    var endDate = new Date(y,m,d); 

    comp = value.split('/'); 
    m = parseInt(comp[0], 10); 
    d = parseInt(comp[1], 10); 
    y = parseInt(comp[2], 10); 
    var date = new Date(y,m,d); 

    return this.optional(element) || ((startDate <= date) && (date <= endDate)); 
}); 
Смежные вопросы