2012-02-29 40 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來計算實際經過的天數。

但更糟糕的是,歐洲改變時鐘的日期與紐約時鐘改變的日期不同。因此,只有時區不足以確定已經過了多少天;位置也是必要的。

夏令時增加了日期處理的複雜性。在我的網站中,精確計算所通過天數的功能接近一百行。實際的複雜性取決於計算是客戶端還是服務器端,還是兩者都在查看數據。