【发布时间】:2010-10-24 10:56:33
【问题描述】:
如何在 jQuery 中检查/验证结束日期 [文本框] 是否大于开始日期 [文本框]?
【问题讨论】:
标签: jquery date jquery-validate
如何在 jQuery 中检查/验证结束日期 [文本框] 是否大于开始日期 [文本框]?
【问题讨论】:
标签: jquery date jquery-validate
只是扩展融合的答案。此扩展方法使用 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 if (value == 0) { return true; } else if (!/Invalid|NaN/... code
var 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's answer,发现虽然是出于好意,但遗憾的是它在几个非 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"),这显然与预期效果相反)。
因此,经过考虑,我修改了代码以优先于“日期”路径,并使用 Validate decimal numbers in 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();
我强烈建议在比较日期字符串之前对其进行解析。 Javascript 的 Date 对象有一个 parse()-Method,但它只支持美国日期格式 (YYYY/MM/DD)。它返回自 unix 纪元开始以来的毫秒数,因此您可以简单地将值与 > 或 <.> 进行比较
如果您想要不同的格式(例如 ISO 8661),您需要使用正则表达式或免费的 date.js 库。
如果你想成为超级用户,你可以使用 jquery ui datepickers 而不是 textfields。有一个允许输入日期范围的日期选择器变体:
http://www.filamentgroup.com/lab/date_range_picker_using_jquery_ui_16_and_jquery_ui_css_framework/
【讨论】:
在 javascript/jquery 中,大多数开发人员使用字符串形式的 From & To 日期比较,而不转换为日期格式。 比较从日期开始的最简单方法是大于迄今为止的日期。
Date.parse(fromDate) > Date.parse(toDate)
在比较之前总是解析从和到日期以获得准确的结果
【讨论】:
jQuery('#from_date').on('change', function(){
var date = $(this).val();
jQuery('#to_date').datetimepicker({minDate: 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)
}
});
});
或访问此link
【讨论】:
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'));
}
希望这会有所帮助:)
【讨论】:
首先使用 split 函数拆分两个输入框的值。 然后以相反的顺序连接相同的内容。 连接国家后将其解析为整数。 然后比较 if 语句中的两个值。 例如1>2018 年 20 月 11 日 2>2018 年 21 月 11 日
在拆分和连接新值后比较 20181120 和 20181121 之后比较相同。
var date1 = $('#datevalue1').val();
var date2 = $('#datevalue2').val();
var d1 = date1.split("-");
var d2 = date2.split("-");
d1 = d1[2].concat(d1[1], d1[0]);
d2 = d2[2].concat(d2[1], d2[0]);
if (parseInt(d1) > parseInt(d2)) {
$('#fromdatepicker').val('');
} else {
}
【讨论】:
这应该可以工作
$.validator.addMethod("endDate", function(value, element) {
var startDate = $('#date_open').val();
return Date.parse(startDate) <= Date.parse(value) || value == "";
}, "* End date must be after start date");
【讨论】:
你可以在两个不同的日期做这样的警报。
$('#end_date').on('change', function(){
var startDate = $('#start_date').val();
var endDate = $('#end_date').val();
if (endDate < startDate){
alert('End date should be greater than Start date.');
$('#end_date').val('');
}
});
您可以在日历上执行,它会自动禁用以前的日期。
$("#start_date").datepicker({
dateFormat: 'dd/mm/yy',
onSelect: function(date) {
$("#end_date").datepicker('option', 'minDate', date);
}
});
$("#end_date").datepicker({ dateFormat: 'dd/mm/yy' });
【讨论】:
如果格式保证是正确的 YYYY/MM/DD 并且两个字段之间完全相同,那么您可以使用:
if (startdate > enddate) {
alert('error'
}
作为字符串比较
【讨论】: