如何使用jQuery检查/验证结束日期[textbox]是否大于开始日期[textbox]?
如何使用jQuery检查/验证结束日期[textbox]是否大于开始日期[textbox]?
在 Fusion 的回答上进行扩展。这个扩展方法使用了 jQuery 验证插件,可以验证日期和数字。
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" }
}
});
code
如果(value == 0){
返回真;
} else if (!/Invalid|NaN/...
code
- Frank Lukevar startDate = new Date($('#startDate').val());
var endDate = new Date($('#endDate').val());
if (startDate < endDate){
// Do something
}
我想那应该可以解决问题。
我来晚了,但这是我的份儿。
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");
}
引用jquery.validate.js和jquery-1.2.6.js。 将startDate类添加到开始日期文本框中。 将endDate类添加到结束日期文本框中。
将以下脚本块添加到您的页面:
<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>
希望这可以帮到你 :-)我只是在尝试 danteuno 的回答,然后发现虽然它的初衷是好的,但遗憾的是,在一些非IE浏览器上它是无效的。这是因为IE对传递给 Date
构造函数的参数比较严格,而其他浏览器则不同。例如,Chrome 18 的返回值如下:
> new Date("66")
Sat Jan 01 1966 00:00:00 GMT+0200 (GTB Standard Time)
这段代码导致程序选择“比较日期”的路径,从那里开始就一切都走下坡路了(例如,new Date("11")
大于 new Date("66")
,这显然是相反于预期的效果)。
因此,在考虑后,我修改了代码,优先处理“数字”路径而非“日期”路径,并使用在JavaScript中验证十进制数字 - IsNumeric()提供的出色方法验证输入确实为数字。
最终代码如下:
$.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}.');
我需要这个规则是可选的,而以上建议都不是可选的。即使我将其设置为需要值,如果我调用该方法,它仍然显示为必填项。
以下是我的调用:
$("#my_form").validate({
rules: {
"end_date": {
required: function(element) {return ($("#end_date").val()!="");},
greaterStart: "#start_date"
}
}
});//validate()
我的 addMethod
不如 Mike E. 最好的答案强大,但我正在使用 JqueryUI 日期选择器来强制进行日期选择。如果有人可以告诉我如何确保日期是数字并使方法可选,那就太好了,但现在这个方法对我来说已经有效:
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.');
可以使用jQuery的.val()方法获取文本字段中的日期值,例如:
var datestr1 = $('#datefield1-id').val();
var datestr2 = $('#datefield2-id').val();
http://www.filamentgroup.com/lab/date_range_picker_using_jquery_ui_16_and_jquery_ui_css_framework/
Date.parse(fromDate) > Date.parse(toDate)
$(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)
}
});
});
Or Visit to this link
jQuery('#from_date').on('change', function(){
var date = $(this).val();
jQuery('#to_date').datetimepicker({minDate: date});
});