2012-11-05 139 views
6

首先,JavaScript沒有基本的日期比較Python的方式嗎?JavaScript Node.js日期比較和數組按日期排序

在我的Node.js的劇本,我有以下行:

console.log(Date(2012,11,10) < Date(2012, 11, 9)) 
console.log(Date(2012,11,10) > Date(2012, 11, 9)) 

然而,這些線路都返回

看起來有很多關於「JavaScript比較日期」的問題。

然而,幾乎所有的人都會用他們的自制解決方案來回答比較日期,其中有些日期相當長和/或「hacky」。

真的沒有固有的或慣用的方法來簡單地比較JavaScript中的日期。
是否有任何Node庫支持它?

回答

9

您需要使用new關鍵字

console.log(new Date(2012,11,10) < new Date(2012, 11, 9)) 
console.log(new Date(2012,11,10) > new Date(2012, 11, 9)) 

由於Elias Van Ootegem指出,這是一個標準的返回一個字符串,如果省略new關鍵字:

當日期被稱爲一個函數,而而不是作爲構造函數,它會返回一個表示當前時間(UTC)的字符串。


函數調用Date(…)是不等同於對象創建表達式new Date(…)使用相同參數。

來源:15.9.2 The Date Constructor Called as a Function

+4

[不只是Chrome 22](http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.2),它是語言標準,當'新關鍵字被省略 –

+1

@chrisco使用'var before = new Date(...)'。如果你不這樣做,它會將一個字符串分配給'之前'而不是一個日期對象。 – andlrc

2

我只是碰到了日期比較問題自己,雖然我可以看到@ DEV-空的答案構造new Date(2012,11,10)的日期的工作,它似乎並沒有爲解析的日期的工作,至少在我的情況:

[[email protected]]~$ node -v 
v4.3.2 
[[email protected]]~$ node 
> new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)') == new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)') 
false 
> new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)') < new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)') 
false 
> new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)') > new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)') 
false 

,我發現比較可靠使用getTime()函數J/S Date對象,並從兩個比較結果的唯一途徑。

> new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)').getTime() == new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)').getTime() 
true 
> new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)').getTime() < new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)').getTime() 
false 
> new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)').getTime() > new Date('Wed Mar 09 2016 17:31:58 GMT-0800 (PST)').getTime() 
false