【问题标题】:jQuery validation to compare start and end datejQuery验证比较开始和结束日期
【发布时间】:2013-11-18 05:55:52
【问题描述】:

我有两个字段。一个用于 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>

【问题讨论】:

  • 向我们展示您的尝试?
  • 什么类型的值(例如 01, 1, Jan, January)?哪个选择是哪个(例如 person_start_date_1i 是日、月还是年)?
  • 见上图,erb代码下面有个html
  • 这里我只能添加jQuery验证器添加方法来验证。我可以添加任何警报。所以我正在搜索名称来验证来自所有提示的字段和字段

标签: javascript jquery ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

这是一个建议:

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
}

【讨论】:

    【解决方案2】:

    如果您有数字形式的年、月和日值(它们可以是类型数字或字符串),您可以创建如下日期:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      validate end date equal to greater than start date

      Validate that end date is greater than start date with jQuery

      更新:

      此链接准确地描述了您的问题并为它提供了一个很好的解决方案

      jQuery validate date field for seperate year, month, date

      【讨论】:

      • 您可以从输入字段(选择下拉菜单)中检索月份、日期和年份的值,并在 JQuery 中构造一个 Date 对象,然后使用上面的链接来验证它们。
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2012-12-03
          • 2012-04-27
          • 2018-01-31
          • 1970-01-01
          • 1970-01-01
          • 2015-09-29
          • 1970-01-01
          • 2019-07-08
          • 1970-01-01
          相关资源
          最近更新 更多