JavaScript - 日期比较
在任何编程语言中,我们经常需要比较日期。在 JavaScript 中,日期是数据类型之一,开发人员在构建应用程序或编写某些基于日期的程序时经常会使用日期。
让我们通过一个实际的例子来理解比较日期的必要性。大多数人都在使用互联网数据,而运营商会发送一条消息,例如"您的数据包有效期还剩 2 天"。此外,用户也可以在网络提供商的应用程序中看到相同的通知。剩余天数是使用日期比较计算的,如果我们找到当前日期和到期日期之间的差值,我们就能得到结果。
在 JavaScript 中有多种方法可以比较日期。我们将讨论一些在 JavaScript 中比较日期的方法。
- 使用 getTime() 方法
- 使用 Moment.js diff() 方法
使用 getTime() 方法
在 JavaScript 中,日期由名为 Date 的类表示。您可以使用此类的方法对日期对象执行各种操作。
要比较两个日期对象,我们可以使用 getTime() 方法。此方法返回从 1970 年 1 月 1 日星期四 00:00:00(纪元时间)开始的总毫秒数。我们可以对两个日期值调用 getTime() 方法并比较结果。
语法
以下代码片段演示了如何使用 getTime() 方法进行日期比较 -
let date1 = new Date();
let date2 = new Date(2012, 11, 21);
// 比较日期
if ( date1.getTime() < date2.getTime() ) {
// date 1 晚于 date2
} else if ( date1 > date2 ) {
// date1 晚于 date2
} else {
// date1 和 date2 相同
}
示例
在下面的示例中,我们创建了两个新的日期对象,并使用 if-else 语句比较了这两个日期自纪元(使用 getTime() 方法获取)以来的值(毫秒)。我们可以在输出中看到不同日期之间的比较结果。
<html>
<head>
</head>
<body>
<h4> compare two date by <i> using total milliseconds </i> of both dates. </h4>
<p id = "output"> </p>
<script>
let output0 = document.getElementById("output");
function compareDates( date1, date2 ) {
if ( date1.getTime() < date2.getTime() ) {
output0.innerHTML += date1 + " is behind the " + date2 + " <br/> ";
} else if ( date1 > date2 ) {
output0.innerHTML += date2 + " is behind the " + date1 + " <br/> ";
} else {
output0.innerHTML += date1 + " is same as " + date2 + " <br/> ";
}
}
// 针对不同的表达式调用函数
output0.innerHTML += "<br/>";
let date = new Date();
let date0 = new Date(2012, 11, 21);
compareDates( date, date0 );
output0.innerHTML += "<br/>";
date0 = new Date();
compareDates( date, date0 );
</script>
</body>
</html>
使用 Moment.js diff() 方法
JavaScript 包含各种库;其中之一是 Moment.js,它也用于管理日期和时间。
此库有一个名为 diff() 的方法,它可以计算两个日期之间的差值,例如年、月、日、时、分、秒、毫秒等。我们可以使用秒数来计算两个日期之间的差值。
注意:在使用 Moment.js 库之前,我们需要添加 Moment.js 库,或者在 HTML 代码的标签中添加 CDN。
语法
以下是 moment.diff() 方法的语法 -
diff( date, unit );
其中:
- date: 是我们需要与当前 moment 对象进行比较的日期(对象)。
- unit: 是我们需要计算差值的单位。可以是年、月、日、时、分、秒、毫秒等。
示例
在下面的示例中,我们使用 moment 库创建了两个日期对象。我们对这两个对象调用了 diff() 方法,以比较它们并相应地渲染消息。
<html>
<h4> compare two dates using<i> diff() </i> method of Moment.js. </h4>
<p id = "output"> </p>
let output = document.getElementById("output");
function compareDates(date1, date2) {
if ( date1.diff(date2, "seconds") < 0 ) {
output.innerHTML += date1.format('yy-MM-DD, HH:mm:ss') + " is behind the " + date2.format('yy-MM-DD, HH:mm:ss') + " <br/> ";
} else if ( date1.diff(date2, "seconds") > 0 ) {
output.innerHTML += date2.format('yy-MM-DD, HH:mm:ss') + " is behind the " + date1.format('yy-MM-DD, HH:mm:ss') + " <br/> ";
} else {
output.innerHTML += date1.format('yy-MM-DD, HH:mm:ss') + " is same as " + date2.format('yy-MM-DD, HH:mm:ss') + " <br/> ";
}
}
// 针对不同的表达式调用函数
output.innerHTML += "<br/>";
let date1 = moment();
let date2 = moment("2024-11-21");
compareDates(date1, date2);
output.innerHTML += "<br/>";
date2 = moment();
compareDates(date1, date2);
</script>
</html>
要运行此程序,您需要在代码中包含以下脚本 -
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.30.1/moment.min.js"></script> <script >
结论
在本教程的第一部分中,我们使用了默认的 Date() 类来比较日期。此外,我们还使用了 Moment.js 库中的方法进行比较。Moment.js 库让开发者可以轻松地处理日期。

