2010-09-21 128 views
10

即时通讯使用jQuery验证插件,并想知道是否有一种方法来验证输入字段的日期是否是像yyyy-mm-dd这样的日期,并且日期介于2010年11月29日 - 2010年12月15日jQuery验证(日期范围)

我对jQuery非常新,所以如果有答案,请尽量愚蠢的答案,所以我可以通过它。非常感谢任何/所有建议

回答

7

我从来没有使用验证插件,但一看通过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类适当的元素。

5

lonesomeday的答案是非常接近,有一些调整。

if(isNaN(enteredDate)) return false; 

    return ((startDate <= enteredDate) && (enteredDate <= endDate)); 
}, "Please specify a date between 2010-11-29 and 2010-12-15"); 

此修复isNaN功能,并让他们知道你在找什么还提供一个错误信息给用户:我会如下结束代码。

+0

Emily请在确认信息中确定日期,即2010-12-15 2015-01-27 13:52:02

9

如果你想有一个可重复使用的功能,您可以延长Emily和lonesomeday的答案,以允许提供参数:

$.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}.")) 

见jQuery验证range方法source为例。

1

在Connor的代码中做了一些小的更正。

产生的工作代码为:

$.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']}); 
1

沉住气,伙计们! :)

不要忘记,Date.parse无法在不同的语言环境下正常工作,它只能正确解析特定的日期格式。

如果您使用各种日期格式(文化特定) - 最好坚持jQuery日期选择器日期处理。所以,假设你已经加载了正确的文化特定的jquery datepicker对象(例如,jquery.ui.datepicker-nb-NO.js,其中日期格式是DD.MM.yyyy并且不被Date解析。解析),并初始化它,正确的做法是:

$.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; 
     } 
    }); 

我已经把try块内parseDate的东西,因为有要弄清楚,如果日期已被正确解析不正常的方式。