【问题标题】:Date subtraction in JavaScriptJavaScript中的日期减法
【发布时间】:2012-02-29 07:19:50
【问题描述】:

我有两个文本框,分别接受 Start DateEnd Date,格式为 YYYY/MM/DD。

如果用户选择的结束日期超过开始日期 50 天,我需要提醒他。

这是我目前所拥有的:

var startDate = new Date(document.getElementsByName('MYSTARTDATE').value);
var endDate = new Date(document.getElementsByName('MYENDDATE').value);
if ((endDate - startDate) > 50) 
{
    alert('End date exceeds specification');
    return false;
}

举个例子,当我选择开始日期为2012/01/22,结束日期为2012/02/29

startDate = 'Sun Jan 22 00:00:00 UTC +0530 2012'
endDate = 'Wed Feb 29 00:00:00 UTC +0530 2012'

endDate - startDate 的结果是3283200000,而不是38。我做错了什么?

【问题讨论】:

    标签: javascript date subtraction


    【解决方案1】:

    3283200000 是以毫秒为单位的 38 天。

    38 天 x 24 小时 x 60 分钟 x 60 秒 x 1000 毫秒

    另外,这两个日期之间有 38 天,而不是 39 天。

    一个简单的解决方案是将变量(实际上是常量)定义为一天中的毫秒数:

    var days = 24*60*60*1000;
    

    并在比较中将该变量用作“单位”:

    if ((endDate - startDate) > 50*days) { 
         ...
    }
    

    【讨论】:

    • 哦..所以我想我只需要将差值除以 (24x60x60x1000) 即可。谢谢!
    【解决方案2】:

    Jeff B 的解决方案不正确,因为夏令时。如果 startDate 是 10 月 31 日,endDate 是 12 月 20 日,那么这两次之间实际经过的时间量是 50 天加 1 小时,而不是 50 天。如果您的程序不关心一天中的时间并将所有时间都设置为午夜,那么这尤其糟糕 - 在这种情况下,整个冬天的所有计算都将减一。

    减去日期的部分正确方法是为每个时间实例化一个新的 Date 对象,然后使用一个包含每个月天数的 Array 来计算实际过去了多少天。

    但更糟糕的是,欧洲更换时钟的日期与纽约更换时钟的日期不同。因此,仅时区不足以确定已经过去了多少天;位置也是必要的。

    夏令时显着增加了日期处理的复杂性。在我的网站中,准确计算经过的天数所需的函数将近一百行。实际的复杂性取决于计算是在客户端还是服务器端或两者兼而有之,以及查看数据的人员。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 2018-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多