2011-09-04 120 views
0

我想測試是否已經過了一段時間。我使用JavaScript。爲什麼這種方法不能獲得兩個日期之間的差異?

兩個例子都使用這個變量:

var delete_after = 2 /*minutes*/ * 60 /*seconds*/ * 1000/*miliseconds*/; // [miliseconds] 

這工作:

var now = new Date(); 
var now_t = now.getTime(); 
var then = new Date(x.time); // x.time is string with a time 
var then_t = then.getTime();//).getTime(); 
if (now_t - then_t > delete_after) { 
    alert("deleted"); 
} 

這不:

if (Date().getTime() - Date(x.time).getTime() > delete_after) { 
    alert("deleted"); 
} 

我belived他們是等價的,但事實並非如此。我檢查了優先級,最後看來我必須調用new來創建一個變量。似乎不可能調用(new Date()。getTime())。請,你會如此善意地解釋爲什麼它不能寫成第二種方式?

+0

「不工作」>。<檢查了每個表達式求,和你我會很快看到發生了什麼事。 –

+0

您可以使用'Date.now()'而不是'var now = new Date(),now_t = now.getTime();'。對於不支持'Date.now()'的瀏覽器,[MDN文檔](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/now)中有一個非常簡單的兼容填充。 – user113716

回答

2

getTime是日期對象的函數,而不是Date()函數,所以您必須調用Date()來獲取日期對象,然後調用getTime。

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date

這把一切都一氣呵成,但它是一個有點混亂

(new Date()).getTime() 
+2

http://www.w3fools.com - 請不要在此推薦該網站。 –

+0

你會推薦哪個? – spike

+0

在鏈接中提到Tomalak提供。 –

3

好吧,如果你想這樣做總之,只要做到這一點是這樣的:

if ((new Date()).getTime() - (new Date(x.time)).getTime() > delete_after) { 
    alert("deleted"); 
} 

您的例子沒有工作,因爲對象有執行上的任何函數調用之前被實例化。

5
  • Date().getTime()

    是不一樣的

    (new Date()).getTime()


  • Date(x.time).getTime()

    是不一樣的

    (new Date(x.time)).getTime()