比较日期字符串

时间:2019-04-23 17:00:39

标签: javascript date compare

我刚刚发现此代码可以正常工作(Chrome,Firefox,Node.js):

"2018-06-02" > "2018-05-10"
<- true

"2018-06-02" > "2020-05-10"
<- false

这真的是要像这样工作吗?除了将它们转换成单独的Date对象并随后进行比较之外,我在JavaScript中无法比较这些格式的字符串。 这是怎么回事,字符串是否在内部转换为数字/日期/字符?

这个不正确的陈述似乎在某些方面也起作用:

"2018-06-20" > "2018-05-40"
<- true

3 个答案:

答案 0 :(得分:2)

  

这真的像这样工作吗?

如果字符串是有效日期,可以,但不是特别因为它们是日期。

按字典顺序(从头到尾)从左到右比较字符串。由于“ 0”小于“ 1”,并且“ 1”小于“ 2”,依此类推,并且由于这些字符串首先具有最重要日期部分(年),而 >最不重要的部分(天),字典顺序也恰好是日期顺序。

如果字符串采用欧洲DD / MM / YYYY格式或美国MM / DD / YYYY格式,则将不起作用,因为按日期顺序从高到低排列的日期部分最多

"2018-06-20" > "2018-05-40"正确的原因是,使用合理的解释第二个变量的含义(日期为2018-06-09),将它们作为日期进行比较,这是错误的,因为它们再次是分别以字符串进行比较。没有规范化,根本没有日期特定的逻辑。

答案 1 :(得分:0)

您可以比较任何类型的字符串。

 "a" < "b"

这称为“词典比较”。它从左到右,一个字符一个字符,如果字符不同,它将比较字母表中的位置。对于具有与预期长度相同长度的数字,因此它也适用于ISO日期字符串。

一些不起作用的示例:

 "19" > "2" // false, "2" is bigger "1"
 "12:35 23.4.2019" < "12:34 25.4.2019" // false, "4" is smaller "5"

答案 2 :(得分:0)

与许多编程语言相同,比较字符串lexicographically

  

按字典顺序的使用出现在ISO 8601标准中   日期,将日期表示为 YYYY-MM-DD 。这种格式   该方案的优点是序列的字典顺序   代表日期的字符与时间顺序重合   顺序:在字典顺序中,较早的日期小于   以后。

这就是为什么

console.log("2018-06-02" > "2018-05-10"); // 6 is greater than 5
console.log("2018-06-02" > "2020-05-10") // 2018 is less than 2020