【问题标题】:Compare two date formats in javascript/jquery比较 javascript/jquery 中的两种日期格式
【发布时间】:2013-09-20 09:43:58
【问题描述】:

我有以下:

var fit_start_time  = $("#fit_start_time").val(); //2013-09-5
var fit_end_time    = $("#fit_end_time").val(); //2013-09-10

if(Date.parse(fit_start_time)>=Date.parse(fit_end_time)){
    alert("Please select a different End Date.");
}

上面的代码不起作用。有没有其他解决方法?

按照Where can I find documentation on formatting a date in JavaScript? 格式化日期也对我有用。

【问题讨论】:

    标签: javascript jquery date-formatting


    【解决方案1】:

    很简单:

    if(new Date(fit_start_time) <= new Date(fit_end_time))
    {//compare end <=, not >=
        //your code here
    }
    

    比较 2 个 Date 实例可以正常工作。它只会隐式调用valueOf,将Date 实例强制为整数,可以使用所有比较运算符进行比较。好吧,100% 准确:Date 实例将被强制转换为 Number 类型,因为 JS 不知道整数或浮点数,它们都是有符号的 64 位 IEEE 754 双精度浮点数。

    【讨论】:

    • 其实同日验证失败。您需要单独执行此操作才能实现此目的。 jsfiddle.net/neBHQ/3
    • @RoyMJ:你的小提琴有缺陷:你永远不会提醒 1,因为日期不能 both &lt; and @ 987654330@。那,== 不会将对象强制转换为整数,因此您正在比较两个不同的对象,因此将始终为假(尝试new Date('2013-09-1') == new Date('2013-09-1') 将始终为假)。你的小提琴应该是this
    • @RoyMJ 我正要写 Elias Van Ootegem 写的东西。您没有在 jsFiddle 中复制他的代码,而是在您的条件中添加了一个 && 子句,使其 have 既相等又减少。这在很多层面上都是愚蠢的。
    • @EliasVanOotegem 谢谢。你拯救了这一天! +1
    • @EliasVanOotegem 在使用不同月份时不起作用。如果我使用的是 11 月的 fit_start_time 日期,而 fit_end_time 是 12 月的日期。然后它没有验证。请帮忙。
    【解决方案2】:

    比较字符串格式的日期(mm-dd-yyyy)。

        var job_start_date = "10-1-2014"; // Oct 1, 2014
        var job_end_date = "11-1-2014"; // Nov 1, 2014
        job_start_date = job_start_date.split('-');
        job_end_date = job_end_date.split('-');
    
        var new_start_date = new Date(job_start_date[2],job_start_date[0],job_start_date[1]);
        var new_end_date = new Date(job_end_date[2],job_end_date[0],job_end_date[1]);
    
        if(new_end_date <= new_start_date) {
          // your code
        }
    

    【讨论】:

    • javascript 不是需要从 0 索引开始的月份吗?你不应该从Date 对象的月份部分中减去-1 吗?如果我错了,请纠正我。
    • 月份索引从 0 开始,因此,console.log(new Date('2014','09','1')) 将显示 2014 年 10 月 1 日。上述解决方案对我有用,但我有将 (month-1) 传递给月份参数。如果 Month 值大于 11,那么我们会遇到意外的日期。
    【解决方案3】:

    在您的示例中,fit_start_time 不晚于fit_end_time

    反过来试试:

    var fit_start_time  = $("#fit_start_time").val(); //2013-09-5
    var fit_end_time    = $("#fit_end_time").val(); //2013-09-10
    
    if(Date.parse(fit_start_time) <= Date.parse(fit_end_time)){
        alert("Please select a different End Date.");
    }
    

    更新

    您的代码暗示您希望看到alert 与您拥有的当前变量。如果是这种情况,那么上面的代码是正确的。如果您的意图(根据警报message 的含义)是确保他们的fit_start_time 变量是fit_end_time 之前 的日期,那么您的原始代码很好,但是您从 jQuery .val() 方法获得的数据未正确解析。如果您向我们提供选择器正在嗅探的实际 HTML,将会有所帮助。

    【讨论】:

    • @RoyMJ 这取决于你所说的“工作”是什么意思。它有效,只是没有给您预期的行为。
    【解决方案4】:

    试试new Date(obj).getTime()

    if( new Date(fit_start_time).getTime() > new Date(fit_end_time).getTime() )
    {
        alert(fit_start_time + " is greater."); // your code
    }
    else if( new Date(fit_start_time).getTime() < new Date(fit_end_time).getTime() )
    {
        alert(fit_end_time + " is greater."); // your code
    }
    else
    {
        alert("both are same!"); // your code
    }
    

    【讨论】:

    • 实际上,如果您将 &gt;= 比较分为两个步骤,这将有效.. 奇怪。
    • 这段代码一遍又一遍地创建相同的Date实例,请不要...只是将它们分配给fit_start_timefit_end_time,以避免无意义的开销
    【解决方案5】:

    这已经在:

    Age from Date of Birth using JQuery

    或者你也可以像在

    中那样使用 Date.parse()
    var date1 = new Date("10/25/2011");
    var date2 = new Date("09/03/2010");
    var date3 = new Date(Date.parse(date1) - Date.parse(date2));
    

    【讨论】:

      【解决方案6】:

      换个方式试试:

      var start_date  = $("#fit_start_time").val(); //05-09-2013
      var end_date    = $("#fit_end_time").val(); //10-09-2013
      var format='dd-MM-y';
          var result= compareDates(start_date,format,end_date,format);
          if(result==1)/// end date is less than start date
          {
                  alert('End date should be greater than Start date');
          }
      
      
      
      OR:
      if(new Date(start_date) >= new Date(end_date))
      {
          alert('End date should be greater than Start date');
      }
      

      【讨论】:

      • 我想你错过了compareDates函数,如果你上面的代码必须工作。
      【解决方案7】:

      var startDate="11-11-2014"; // 2021 年 11 月 10 日

      var endDate="11-1-2014";

      startDate= startDate.split('-');

      endDate= endDate.split('-');

      var newStartDate= new Date(startDate[2],startDate[0]-1,startDate[1]);

      var newEndDate= new Date(endDate[2],endDate[0]-1,endDate[1]);

      if(newEndDate

      }

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多