JavaScript比较日期
原文:Compare Dates in JavaScript
JavaScript比较日期不太容易,Date类型是对象,比较符按照引用而不是按值进行对比。本文简介如何用原生JavaScript比较日期。
有两个Date对象:
1 | const d1 = new Date('2019-06-01'); |
如何判断它们是否相等?奇怪的是,三等和二等比较符都无法比较两个日期。
1 | const d1 = new Date('2019-06-01'); |
要比较两个日期,要使用toString()或valueOf()。toString()方法把日期转换为ISO格式的日期字符串,valueOf()将日期转换为毫秒时间戳。
1 | const d1 = new Date('2019-06-01'); |
< 和 >
虽然==和===都不能判断两个日期是否相等,<和>却是可以比较日期的:
1 | d1 < d2; // false |
要检查日期a是否早于日期b,可以检查a < b。
另一个技巧:你可以进行日期的减法。a - b返回的是两个日期相差的毫秒数。
1 | const d1 = new Date('2019-06-01'); |
换言之,可以用a - b比较两个日期,如果b晚于a,则a - b < 0。
排序
日期数组的排序会有一些奇怪,以下代码得出的竟然是倒序。
1 | const d1 = new Date('2017-06-01'); |
为什么呢?因为JavaScript的排序函数隐式的将数组中所有的值转换为字符串,再进行排序,以上代码中的sort()是基于以下字符串数组进行排序:
1 | [ 'Fri May 31 2019 20:00:00 GMT-0400 (Eastern Daylight Time)', |
实际上,JavaScript会默认按日期的星期缩写(Mon、Tue、Wed、Thu、Fri、Sat、Sun)进行排序。
要按日期的早晚进行排序,需要向sort()函数传入一个compare()回调函数。compare()函数应该返回:
0如果a和b相等- 正数 如果
a > b - 负数 如果
a < b
前文提到日期可以做减法,可以用a - b直接作为比较函数:
1 | const d1 = new Date('2017-06-01'); |