用 JavaScript 比较两个日期

分享于2022年07月17日 compare date datetime javascript 问答
【问题标题】:用 JavaScript 比较两个日期(Compare two dates with JavaScript)
【发布时间】:2022-01-27 08:41:50
【问题描述】:

有人可以建议一种方法来使用 JavaScript 比较 两个日期 大于、小于和不过去的值吗?值将来自文本框。

  • 谈到日期时间和 JS 中的操作,我只看 momentjs :)
  • 无需使用momentjs来比较2个日期。只需使用纯 javascript 的 Date 对象。查看主要答案以获取更多详细信息。
  • 您可以参考以下答案: stackoverflow.com/questions/4812152/… 如果有帮助,请检查 getDateDifference 和 getDifferenceInDays。
  • 我会给你一个比 Moment.js 看得更远的理由( 我喜欢它,但是... ): Don't use for looping loads
  • 对于像我这样可能后来才出现的人来说,moment.js 现在处于“维护模式”, 不再积极开发。

【解决方案1】:

Date object 会做你想做的事 - 为每个日期构造一个,然后使用 > < <= >= 比较它们。

== != === !== 运算符要求您使用 date.getTime() ,如

var d1 = new Date();
var d2 = new Date(d1);
var same = d1.getTime() === d2.getTime();
var notSame = d1.getTime() !== d2.getTime();

要明确,直接与日期对象检查是否相等是行不通的

var d1 = new Date();
var d2 = new Date(d1);

console.log(d1 == d2);   // prints false (wrong!) 
console.log(d1 === d2);  // prints false (wrong!)
console.log(d1 != d2);   // prints true  (wrong!)
console.log(d1 !== d2);  // prints true  (wrong!)
console.log(d1.getTime() === d2.getTime()); // prints true (correct)

不过,我建议您使用下拉菜单或一些类似的受限日期输入形式而不是文本框,以免您陷入输入验证地狱。


对于好奇的人, date.getTime() documentation

返回指定日期的数值,作为自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数。 (之前的时间返回负值。)

  • 即使是 Ace 的方法也不是故障安全的。您需要先重置毫秒,甚至可能想要重置整个时间。 date1.setHours(0); date1.setMinutes(0); date1.setSeconds(0); date1.setMilliseconds(0);结合使用 .getTime() 将为您提供准确的比较结果
  • @patrick,建议以这种方式致电 setHours(0,0,0,0) 。无需调用 setMinutes() 等。此外,执行速度更快。
  • 避免 == 或 === 以获得所需的结果: jsfiddle.net/P4y5J now >= anotherNow && now <= anotherNow 仅供参考
  • 您还可以比较日期的数值以避免比较对象本身:date1.valueOf() == date2.valueOf()