我刚刚发现此代码可以正常工作(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
答案 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