Date.toString比较

时间:2018-01-23 09:25:11

标签: javascript

我们在代码中找到了下一行(是的,你可以问为什么它甚至存在,但它确实存在):

console.log(new Date(2015, 10, 9).toString() > new Date(2015, 9, 10).toString())
// Returns false

console.log(new Date(2015, 5, 9).toString() > new Date(2015, 4, 10).toString())
// Returns true

我们不明白它是如何运作的,所以希望有人可以解释。

4 个答案:

答案 0 :(得分:3)

toString以下列格式返回日期的字符串表示

new Date(2015, 10, 9).toString();
  

“Mon Nov 09 2015 00:00:00 GMT + 0530(印度标准时间)”

第一行

console.log(new Date(2015, 10, 9).toString() > new Date(2015, 9, 10).toString())

false ,因为M > S为假

第二行

console.log(new Date(2015, 5, 9).toString() > new Date(2015, 4, 10).toString())

true ,因为T > M为真

答案 1 :(得分:1)

我在节点上做了这个,看输出,应该是自解释

> console.log(new Date(2015, 10, 9).toString())
Mon Nov 09 2015 00:00:00 GMT+0800 (+08)

> console.log( new Date(2015, 4, 10).toString())
Sun May 10 2015 00:00:00 GMT+0800 (+08)

> console.log(new Date(2015, 5, 9).toString())
Tue Jun 09 2015 00:00:00 GMT+0800 (+08)

> console.log(new Date(2015, 4, 10).toString())
Sun May 10 2015 00:00:00 GMT+0800 (+08)

答案 2 :(得分:1)

基本上,上述表达式评估为:

console.log("Mon Nov 09 2015 00:00:00 GMT+0100 (CET)" > "Sat Oct 10 2015 00:00:00 GMT+0200 (CEST)");
//false

console.log("Tue Jun 09 2015 00:00:00 GMT+0200 (CEST)" > "Sun May 10 2015 00:00:00 GMT+0200 (CEST)");
//true

现在,为什么? JavaScript会比较字符串Lexicographically

意味着每个字符串的首字母首先按字母顺序进行比较。

第一个表达S稍后会出现在字母表中。因此它大于M

第二个表达T稍后会出现在字母表中。因此它大于S

答案 3 :(得分:0)

我不太喜欢字符串操作,但对于第一种情况......

new Date(2015, 10, 9).toString()

以字符串形式给出日期,具体取决于您所在的地区,在我的情况下,它是

Mon Nov 09 2015 00:00:00 GMT+0500 (Pakistan Standard Time)

new Date(2015, 9, 10).toString()

我得到"Sat Oct 10 2015 00:00:00 GMT+0500 (Pakistan Standard Time)"

现在,当两个字符串之间进行比较时,在这种情况下它是> ,javascript引擎比较两个字符串的第一个字符,按字母顺序 M S 之前,因此第一个console.log提供 false ,因为 M 不大于 S

类似的解释是第二种情况,其中 T 字符位于 S 之后,因此 T 大于 S true