jQuery验证以比较开始日期和结束日期

jQuery validation to compare start and end date

本文关键字:日期 结束 开始 比较 验证 jQuery      更新时间:2023-09-26

我有两个字段。一个用于person_start_date,另一个用于person_end_date。两者都有三个独立的字段,分别表示年份、月份和日期。我想验证个人结束日期>个人开始日期。提前谢谢。

html.erb

<%= datetime_select :person_start_date %>

   <select id="person_start_date_1i" name="person[start_date(1i)]"> ... </select>
   <select id="person_start_date_2i" name="person[start_date(2i)]"> ... </select>
   <select id="person_start_date_3i" name="person[start_date(3i)]"> ... </select>

html.erb

<%= datetime_select :person_end_date %>

  <select id="person_end_date_1i" name="person[end_date(1i)]"> ... </select>
  <select id="person_end_date_2i" name="person[end_date(2i)]"> ... </select>
  <select id="person_end_date_3i" name="person[end_date(3i)]"> ... </select>

这里有一个建议:

var startDate = new Date(
    $('#person_start_date_1i').val(),
    $('#person_start_date_2i').val() - 1,
    $('#person_start_date_3i').val()
);
var endDate = new Date(
    $('#person_end_date_1i').val(),
    $('#person_end_date_2i').val() - 1,
    $('#person_end_date_3i').val()
);
if (endDate > startDate) {
    // do something
}

如果您将年、月和日值作为数字(它们可以是Type数字或字符串),则可以创建一个日期,如:

var dStart = new Date(year, --month, day);

请注意,对于日历月份1,javascript月份编号为0(零),因为月份为零索引,因此为--month

你可以直接比较两个日期:

if (dEnd < dStart) {
  // end is before start
}

我认为这些链接中的任何一个都应该回答您的问题:

验证结束日期是否大于开始日期

使用jQuery 验证结束日期是否大于开始日期

更新:

这个链接准确地描述了你的问题,并给出了一个很好的解决方案

jQuery validate date字段用于单独的年、月、日期

http://jsfiddle.net/GGsMx/

再简单不过了。。

var date1 = Date.parse("2012-11-18");
var date2 = Date.parse("2011-11-18");
if (date1 > date2) {
    alert ("Error!");
}
else{
    alert("correct")
}

重要的是,由于使用了日期格式,这样的比较失败了。大多数情况下,它使用mm-dd-yyyy格式,因为PC有相同的区域设置,看起来格式正确,但事实并非如此。为了兼容性,各种语言/平台将日期保持为年月日格式。因此,最好明确地将日期转换为yyyy-mm-dd格式并进行转换,特别是当您使用dd-mm-yyy(Aus或European格式)时。