validation结束date大于jQuery的开始date

如何在jQuery中检查/validation结束date[文本框]是否大于开始date[文本框]?

只是扩大融合的答案。 这个扩展方法使用jQuery validate插件。 它将validationdate和数字

jQuery.validator.addMethod("greaterThan", function(value, element, params) { if (!/Invalid|NaN/.test(new Date(value))) { return new Date(value) > new Date($(params).val()); } return isNaN(value) && isNaN($(params).val()) || (Number(value) > Number($(params).val())); },'Must be greater than {0}.'); 

要使用它:

 $("#EndDate").rules('add', { greaterThan: "#StartDate" }); 

要么

 $("form").validate({ rules: { EndDate: { greaterThan: "#StartDate" } } }); 
 var startDate = new Date($('#startDate').val()); var endDate = new Date($('#endDate').val()); if (startDate < endDate){ // Do something } 

这应该这样做,我认为

引用jquery.validate.js和jquery-1.2.6.js。 将startDate类添加到开始date文本框中。 将endDate类添加到结束date文本框中。

将此脚本块添加到您的页面:

 <script type="text/javascript"> $(document).ready(function() { $.validator.addMethod("endDate", function(value, element) { var startDate = $('.startDate').val(); return Date.parse(startDate) <= Date.parse(value) || value == ""; }, "* End date must be after start date"); $('#formId').validate(); }); </script> 

希望这可以帮助 :-)

晚会不多,但这是我的一部分

Date.parse(fromDate) > Date.parse(toDate)

这里是细节:

 var from = $("#from").val(); var to = $("#to").val(); if(Date.parse(from) > Date.parse(to)){ alert("Invalid Date Range"); } else{ alert("Valid date Range"); } 

我只是修改danteuno的答案 ,发现虽然是善意的,可悲的是,它是在几个不是 IE浏览器打破。 这是因为IE对Date构造函数的参数非常严格,而其他的不会。 例如,Chrome 18给

 > new Date("66") Sat Jan 01 1966 00:00:00 GMT+0200 (GTB Standard Time) 

这导致代码采取“比较date”的path,并从那里一切(如new Date("11")大于new Date("66") ,这显然是与所需的效果相反)。

因此,在考虑之后,我修改了代码以优先考虑“date”path上的“数字”path,并通过validationJavaScript中的十进制数字 – IsNumeric()中提供的出色方法validationinput的确是数字。

最后,代码变成:

 $.validator.addMethod( "greaterThan", function(value, element, params) { var target = $(params).val(); var isValueNumeric = !isNaN(parseFloat(value)) && isFinite(value); var isTargetNumeric = !isNaN(parseFloat(target)) && isFinite(target); if (isValueNumeric && isTargetNumeric) { return Number(value) > Number(target); } if (!/Invalid|NaN/.test(new Date(value))) { return new Date(value) > new Date(target); } return false; }, 'Must be greater than {0}.'); 

来自文本字段的date值可以通过jquery的.val()方法获取

 var datestr1 = $('#datefield1-id').val(); var datestr2 = $('#datefield2-id').val(); 

我强烈build议在比较之前parsingdatestring。 JavaScript的date对象有一个parsing() – 方法,但它只支持美国date格式(YYYY / MM / DD)。 它返回自unix时代开始以来的毫秒数,因此您可以简单地将您的值与>或<进行比较。

如果你想要不同的格式(如ISO 8661),你需要使用正则expression式或免费的date.js库。

如果你想成为超级用户,你可以使用jquery ui datepickers而不是textfields。 有一个datepicker变种,允许inputdate范围:

http://www.filamentgroup.com/lab/date_range_picker_using_jquery_ui_16_and_jquery_ui_css_framework/

所以我需要这个规则是可选的,以上build议都不是可选的。 如果我打电话的方法,即使我把它设置为需要一个值的要求显示。

这是我的电话:

  $("#my_form").validate({ rules: { "end_date": { required: function(element) {return ($("#end_date").val()!="");}, greaterStart: "#start_date" } } });//validate() 

我的addMethod不像Mike E.的最高评价答案那样健壮,但是我使用JqueryUI datepicker来强制selectdate。 如果有人可以告诉我如何确保date是数字,并有方法是可选的,这将是伟大的,但现在这种方法适用于我:

 jQuery.validator.addMethod("greaterStart", function (value, element, params) { return this.optional(element) || new Date(value) >= new Date($(params).val()); },'Must be greater than start date.'); 

我喜欢弗兰兹所说的,因为我正在使用:P

 var date_ini = new Date($('#id_date_ini').val()).getTime(); var date_end = new Date($('#id_date_end').val()).getTime(); if (isNaN(date_ini)) { // error date_ini; } if (isNaN(date_end)) { // error date_end; } if (date_ini > date_end) { // do something; } 
 $(document).ready(function(){ $("#txtFromDate").datepicker({ minDate: 0, maxDate: "+60D", numberOfMonths: 2, onSelect: function(selected) { $("#txtToDate").datepicker("option","minDate", selected) } }); $("#txtToDate").datepicker({ minDate: 0, maxDate:"+60D", numberOfMonths: 2, onSelect: function(selected) { $("#txtFromDate").datepicker("option","maxDate", selected) } }); }); 

或访问此链接

 function endDate(){ $.validator.addMethod("endDate", function(value, element) { var params = '.startDate'; if($(element).parent().parent().find(params).val()!=''){ if (!/Invalid|NaN/.test(new Date(value))) { return new Date(value) > new Date($(element).parent().parent().find(params).val()); } return isNaN(value) && isNaN($(element).parent().parent().find(params).val()) || (parseFloat(value) > parseFloat($(element).parent().parent().find(params).val())) || value == ""; }else{ return true; } },jQuery.format('must be greater than start date')); } function startDate(){ $.validator.addMethod("startDate", function(value, element) { var params = '.endDate'; if($(element).parent().parent().parent().find(params).val()!=''){ if (!/Invalid|NaN/.test(new Date(value))) { return new Date(value) < new Date($(element).parent().parent().parent().find(params).val()); } return isNaN(value) && isNaN($(element).parent().parent().find(params).val()) || (parseFloat(value) < parseFloat($(element).parent().parent().find(params).val())) || value == ""; } else{ return true; } }, jQuery.format('must be less than end date')); } 

希望这会帮助:)

 jQuery('#from_date').on('change', function(){ var date = $(this).val(); jQuery('#to_date').datetimepicker({minDate: date}); }); 

如果格式保证是正确的YYYY / MM / DD和两个字段完全相同,那么你可以使用:

 if (startdate > enddate) { alert('error' } 

作为string比较