如何在 Javascript 中进行日期比较?

IT技术 javascript datetime
2021-02-17 13:51:05

我想比较 javascript 中的两个日期。我一直在做一些研究,但我能找到的只是如何返回当前日期。我想比较 2 个不同的日期,与今天无关。我怎么做。

var startDate = Date(document.form1.Textbox2);
6个回答
if (date1.getTime() > date2.getTime()) {
    alert("The first date is after the second date!");
}

引用日期对象

@JonathanDumaine 同意,认为它看起来好多了:)
2021-04-28 13:51:05
我有这个建议,但 getTime 函数返回一个未定义的值。我认为我不太了解 getTime()。那应该是预定义的函数吗?
2021-04-30 13:51:05
似乎 chrome 和 firefox 支持date1 > date2,也就是说,没有 getTime() 部分。有人知道其他浏览器吗?
2021-04-30 13:51:05
2021-05-07 13:51:05
@Linus 我不相信实现会正确执行。安全总比抱歉好,是吗?
2021-05-16 13:51:05
new Date('1945/05/09').valueOf() < new Date('2011/05/09').valueOf()
@AjayBarot 已检查在最新的 FireFox 中运行良好
2021-04-23 13:51:05
工作正常谢谢
2021-04-27 13:51:05
@VladimirShmidt:它在 Firefox 中不起作用。
2021-05-02 13:51:05

JavaScript 的日期可以使用与其余数据类型相同的比较运算符进行比较:>、<、<=、>=、==、!=、===、!==。

如果您有两个日期 A 和 B,则 A < B 如果 A 比 B 更早地追溯到过去。

但听起来您遇到的问题是将字符串转换为日期。您只需将字符串作为新日期的参数传递即可:

var someDate = new Date("12/03/2008");

或者,如果您想要的字符串是表单字段的值,看起来可能是:

var someDate = new Date(document.form1.Textbox2.value);

如果该字符串不是 JavaScript 识别为日期的内容,您仍然会得到一个 Date 对象,但它将是“无效的”。任何与另一个日期的比较都将返回 false。当转换为字符串时,它将成为“无效日期”。它的 getTime() 函数将返回 NaN,并且在日期本身上调用 isNaN() 将返回 true;这是检查字符串是否为有效日期的简单方法。

new Date("12/1/2015") !== new Date("12/1/2015"),所以说你比较像“其余数据类型”这样的javascript日期充其量是误导。投反对票。
2021-04-25 13:51:05
==, !=, ===, !=== 不起作用。此外,没有 !=== 运算符。
2021-04-29 13:51:05
如果字符串无法解析为日期会发生什么?
2021-05-07 13:51:05
这不适用于 == (至少在 Firefox 上)。直接比较两个日期总是返回 false,您必须使用上面提到的 getTime()。
2021-05-07 13:51:05
在 Visual Studio 2010 javascript 调试器中:?(new Date('1995-02-04T24:00') == new Date('1995-02-05T00:00')); false但是?(new Date('1995-02-04T24:00').getTime() == new Date('1995-02-05T00:00').getTime()); true
2021-05-07 13:51:05

您可以在 Date 对象上使用 getTime() 方法来获取相对于 1970 年 1 月 1 日的时间戳(以毫秒为单位)。如果将两个日期转换为整数时间戳,则可以通过减去它们来比较差异。结果将以毫秒为单位,因此您只需除以 1000 秒,然后除以 60 分钟,依此类推。

我宁愿使用 Date valueOf 方法而不是 === 或 !==

似乎 === 正在比较内部对象的引用,而与日期无关。

我喜欢这种方法,因为它正确地将日期时间解释为自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数,因此执行类似 myDate.valueOf() == anotherDate.valueOf() 的操作可以与毫秒完全匹配。
2021-04-17 13:51:05