比较日期字符串

问题描述 投票:0回答:3

我刚刚发现这段代码工作正常(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
javascript date compare
3个回答
2
投票

这真的打算像这样工作吗?

如果字符串是有效日期,那很好,但不具体,因为它们是日期。

字符串按字典(松散,字母)顺序从左到右进行比较。由于“0”小于“1”,“1”小于“2”等,并且由于这些字符串具有最重要的日期部分(年),最不重要部分(天)最后,因此订单也恰好是日期订单。

如果字符串是欧洲DD / MM / YYYY格式,或美国MM / DD / YYYY格式,它将无法工作,因为那些没有最多的日期部分,以便最重要到最不重要。

"2018-06-20" > "2018-05-40"之所以如此,但是将它们作为日期进行比较,使用对第二个应该是什么意思的合理解释(2018-06-09的日期),将是错误的,再次,它们被比较为字符串,逐个字符。没有进行规范化,根本没有特定于日期的逻辑。


0
投票

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

 "a" < "b"

这称为词典比较。它将从左到右,char by char,并且如果角色不同,将比较字母表中的位置。对于具有相同长度的数字数字将按预期工作,因此它也适用于ISO日期字符串。

一些不起作用的例子:

 "19" > "2" // false, "2" is bigger "1"
 "12:35 23.4.2019" < "12:34 25.4.2019" // false, "4" is smaller "5"
© www.soinside.com 2019 - 2024. All rights reserved.