JavaScript Node.js日期比较和数组按日期排序

时间:2012-11-05 15:10:20

标签: javascript node.js date

首先,JavaScript没有像Python那样的基本日期比较吗?

在我的Node.js脚本中,我有以下几行:

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

但是,这两行都会返回 false

似乎有很多关于“JavaScript中的日期比较”的问题。

然而,对于几乎所有人来说,有人用他们的自制解决方案来回应比较日期,其中一些很长和/或“hacky”。​​

是否真的没有固有或惯用的方式来简单地比较JavaScript中的日期 任何Node库都支持它吗?

2 个答案:

答案 0 :(得分:11)

您需要使用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关键字,则返回字符串是标准:

  

当Date作为函数而不是构造函数调用时,它返回表示当前时间(UTC)的String。

     

请注意
  函数调用Date(…)不等同于具有相同参数的对象创建表达式new Date(…)

来源:15.9.2 The Date Constructor Called as a Function

答案 1 :(得分:2)

我自己也遇到了日期比较问题,虽然我可以看到@ dev-null的答案对构造为new Date(2012,11,10)的日期有效,但它似乎不适用于解析日期,至少在我的情况下:

[vps@palladin]~$ node -v
v4.3.2
[vps@palladin]~$ 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

我发现可靠地比较J / S Date对象的唯一方法是使用getTime()函数,并比较两者的结果。

> 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