2012-02-29 76 views
5

我有两个文本框,分别接受Start DateEnd Date,格式为YYYY/MM/DD。JavaScript中的日期减法

我需要提醒用户他是否选择了超过开始日期50天的结束日期。

这是我到目前为止有:

​​

只是作为一个例子,当我选择开始日期为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。我做错了什么?

回答

9

3283200000为38天,以毫秒为单位。

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

此外,还有那些两个日期之间38天,不39.

一个简单的解决方案是为具有可变(恒定真的)定义为毫秒的一天数:

var days = 24*60*60*1000; 

,并使用该变量作为你比较的“单位”:

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

哦..所以我想我只需要将差异除以(24x60x60x1000)then.Thanks! – user656523 2012-02-29 07:26:55

+0

是的,请参阅我的编辑以获取简单易用的解决方案。 – 2012-02-29 07:30:04

0

由于夏令时,Jeff B的解决方案不正确。如果开始日期是例如10月31日,并且结束日期是12月20日,则在这两次之间实际经过的时间量是50天加1小时,而不是50天。如果你的程序不关心一天的时间并且在午夜时间设置所有时间,那么这是非常糟糕的 - 在这种情况下,所有的计算在整个冬季都会被关闭一次。

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

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

夏令时增加了日期处理的复杂性。在我的网站中,精确计算所通过天数的功能接近一百行。实际的复杂性取决于计算是客户端还是服务器端,还是两者都在查看数据。