2011-09-04 126 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()