假设你有两个 JavaScript Date 对象:
const d1 = new Date(2019-06-01);
const d2 = new Date(2018-06-01);
const d3 = new Date(2019-06-01);
如果两个日期相等,您如何比较? 令人惊讶的是, 双等号 都不起作用。
const d1 = new Date(2019-06-01);
const d2 = new Date(2018-06-01);
const d3 = new Date(2019-06-01);
d1 === d3; // false
d1 == d3; // false
要比较两个日期,您可以使用 toString() 或者 valueOf(),toString() 方法将日期转换为 ISO 日期字符串,并且 valueOf() 方法将日期转换 为自 epoch 以来的毫秒数 。
const d1 = new Date(2019-06-01);
const d2 = new Date(2018-06-01);
const d3 = new Date(2019-06-01);
// Fri May 31 2019 20:00:00 GMT-0400 (Eastern Daylight Time)
d1.toString();
d1.valueOf(); // 1559347200000
d1.toString() === d2.toString(); // false
d1.toString() === d3.toString(); // true
d1.valueOf() === d2.valueOf(); // false
d1.valueOf() === d3.valueOf(); // true
Before and After
虽然两者都没有 == 也不 === 可以比较两个日期是否相等,令人惊讶的是两者 < 和 > 可以很好地比较日期:
d1 < d2; // false
d1 < d3; // false
d2 < d1; // true
所以要检查日期 a 在日期之前 b,你可以检查 a < b。
另一个巧妙的技巧:你可以在 JavaScript 中减去日期。 减法 a - b 以毫秒为单位为您提供两个日期之间的差异。
const d1 = new Date(2019-06-01);
const d2 = new Date(2018-06-01);
const d3 = new Date(2019-06-01);
d1 - d3; // 0
d1 - d2; // 1 year in milliseconds, 1000 * 60 * 60 * 24 * 365
换句话说,您可以比较两个日期 a 和 b 通过使用 a - b,如果 b 在之后 a, 然后 a - b < 0。
排序
在 JavaScript 中对日期数组进行排序并不像您预期的那样工作。下面 sort() call 以相反的顺序为您提供日期。
const d1 = new Date(2017-06-01);
const d2 = new Date(2018-06-01);
const d3 = new Date(2019-06-01);
[d2, d1, d3].sort(); // [d3, d2, d1]
这是为什么? 因为 JavaScript 的 sort 函数 会在排序前将数组中的所有值隐式转换为字符串。所以以上 sort() 实际上是根据以下字符串值进行排序:
[ Fri May 31 2019 20:00:00 GMT-0400 (Eastern Daylight Time),
Thu May 31 2018 20:00:00 GMT-0400 (Eastern Daylight Time),
Wed May 31 2017 20:00:00 GMT-0400 (Eastern Daylight Time) ]
换句话说,默认情况下,JavaScript 根据星期几对日期数组进行隐式排序,要根据先发生的日期对日期进行排序,您需要传递一个 compare() 回调 到 sort() 功能。compare() 函数应该返回:
0如果a和b相等- 如果是正数
a > b - 如果是负数
a < b
由于 JavaScript 允许您减去日期,因此您可以使用 a - b 作为您的比较功能:
const d1 = new Date(2017-06-01);
const d2 = new Date(2018-06-01);
const d3 = new Date(2019-06-01);
[d2, d1, d3].sort((a, b) => a - b); // [d1, d2, d3]








请登录后查看评论内容