日期"字符串"比较大小 "2021-05-08" < "2021-08-09"

发布于 2022-09-12 23:40:13 字数 170 浏览 8 评论 0

"2021-05-08" < "2021-05-09"
// true

"2021-05-08" <= "2021-05-08"
// true

"2021-05-08" < "2021-05-07"
// fasle

请问是怎么比较的

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

苏辞 2022-09-19 23:40:13

最简单的转换成数字不就可以比较了

const a = '2021-05-08'
const b = '2021-05-09'
function toNum(date) {
  return date.replaceAll('-', '')
}

toNum(a) > toNum(b)

或者Date 日期转换一下也行 都一样的

机场等船 2022-09-19 23:40:13
new Date('2021-05-08').valueOf() < new Date('2021-05-07').valueOf()
+'2021-05-08'.split('-').join('') < +'2021-05-07'.split('-').join('')
+'2021-05-08'.replaceAll('-','') < +'2021-05-07'.replaceAll('-','')
戈亓 2022-09-19 23:40:13

比较的时候,从字符串左边开始,依次比较每个字符,直接出现差异、或者其中一个串结束为止。
比如ABC与ACDE比较,第一个字符相同,继续比较第二个字符,由于第二个字符是后面一个串大,所以不再继续比较,结果就是后面个串大。
再如ABC与ABC123比较,比较三个字符后第一个串结束,所以就是后面一个串大。
所以,长度不能直接决定大小,字符串的大小是由左边开始最前面的字符决定的。

尝蛊 2022-09-19 23:40:13

本质是字符串比较,从左到右按位比较每个字符串的ascii值,标准的时间字符串有0补位,比如1月份是01,会小于12月,所有这样比较也基本得到正确结果,前提是有一个标准的时间字符串。

紫瑟鸿黎 2022-09-19 23:40:13

从左到右,依次判断,有一个值大,那就是大
如果前面一致,在出现特殊符号的时候,将特殊符号转换成ASCII码,然后根据ASCII码的值再来进行比较,如果ASCII码值大,那就是大。

具体示例:

'1234-1234-1234' > '1234+333234.1234'
// true
'1234-1234-1234' > '1235+333234.1234'
// false
'1234-1234-1234' > '1235-333234-1234'
// false
'1234-1234-1234' > '1234+1234-1234'
// true
'1234-1234-1234' > '1234/1234-1234'
// false

剖析:
'+' 的 ASCII码值是:43
'-' 的 ASCII码值是:45
'/' 的 ASCII码值是:47

具体参照:ASCII码对照表

花伊自在美 2022-09-19 23:40:13

后端最好返回“datatime 类型,而不是timestamp,这种数据格式大小有限”,数据格式统一;前端根据需求把时间戳转换为需要展示的格式即可

腹黑女流氓 2022-09-19 23:40:13

可以把时间转成时间戳再对比

new Date('2021-05-08').getTime() < new Date('2021-05-07').getTime()
梦萦几度 2022-09-19 23:40:13
Date.parse('2021-05-08')这个方法可以返回距某个时间的毫秒数,然后以此来比较大小
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文