JavaScript中的日期减法

JavaScript中的日期减法,javascript,date,subtraction,Javascript,Date,Subtraction,我有两个文本框,分别接受YYYY/MM/DD格式的开始日期和结束日期 如果用户选择的结束日期超过开始日期50天,我需要提醒用户 以下是我目前掌握的情况: var startDate = new Date(document.getElementsByName('MYSTARTDATE').value); var endDate = new Date(document.getElementsByName('MYENDDATE').value); if ((endDate - startDate) &

我有两个文本框,分别接受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
。我做错了什么?

3283200000是38天(毫秒)

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

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

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

var days = 24*60*60*1000;
并将该变量用作比较中的“单位”:

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

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

减去日期的正确方法之一是为每个时间实例化一个新的日期对象,然后使用一个包含每个月天数的数组来计算实际经过的天数

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


夏时制增加了日期处理的复杂性。在我的网站上,精确计算天数所需的函数有近一百行。实际的复杂性取决于计算是客户端还是服务器端,或者两者都是,以及谁在查看数据。

噢..所以我想我只需要将差值除以(24x60x60x1000)。谢谢!