使用 JavaScript 比较两个日期字符串

使用 JavaScript 比较两个日期字符串

Compare two Date strings using JavaScript

比较两个日期字符串:

  1. 将字符串传递给Date()构造函数以创建 2 个Date对象。
  2. 比较根据getTime()日期调用方法的输出。
索引.js
const dateStr1 = '2022-04-24'; const dateStr2 = '2022-09-21'; const date1 = new Date(dateStr1); const date2 = new Date(dateStr2); if (date1.getTime() === date2.getTime()) { console.log('dates are the same'); } else { // ✅ This runs 👇️ (dates are NOT the same) console.log('dates are not the same'); } if (date1.getTime() > date2.getTime()) { console.log('date1 comes after date2'); } else if (date1.getTime() < date2.getTime()) { // ✅ This runs 👇️ (date2 comes after) console.log('date2 comes after date1'); } else { console.log('dates are the same'); }

我们将日期字符串传递给
Date()
构造函数以创建 2 个
Date对象。

如果将日期字符串传递给Date()构造函数未返回有效日期,则您必须以不同方式格式化日期字符串,例如yyyy-mm-dd
(更多内容见下文)。

getTime
方法返回 1970 年 1 月 1 日 00:00:00 和给定日期之间经过的毫秒数的时间戳

更大的数字意味着自 Unix Epoch 以来已经过去了更多时间,因此日期更大。

我们比较了两个日期——2022 年 4 月 24 日和 2022 年 9 月 21 日。

在我们的第一个if语句中,我们检查日期字符串是否指向同一年、同一月和同一月的某一天,如果情况不是这样,那么我们的else
块就会运行。

在第二个示例中,else if块运行是因为第二个日期在第一个日期之后。

应该注意的是,您不必getTime()在比较日期时显式调用该方法。

索引.js
const dateStr1 = '2022-04-24'; const dateStr2 = '2022-09-21'; const date1 = new Date(dateStr1); const date2 = new Date(dateStr2); if (date1 > date2) { console.log('date1 comes after date2'); } else if (date1 < date2) { // ✅ This runs 👇️ (date2 comes after) console.log('date2 comes after date1'); } else { console.log('dates are the same'); }
每个日期都在后台存储一个时间戳,因此默认行为是比较日期的时间戳,即使您没有在每个日期显式调用该方法也是如此。 getTime()

您选择哪种方法是个人喜好的问题。

如果您在从日期字符串创建有效Date对象时遇到困难,您可以将 2 种类型的参数传递给Date()构造函数:

  1. 一个有效的 ISO 8601 字符串,格式为YYYY-MM-DDTHH:mm:ss.sssZ, 或者只是
    YYYY-MM-DD,如果你只有一个没有时间的日期。
  2. 多个逗号分隔的参数,表示year, month(0 = 一月到 11 = 十二月
    day of the month、、、hoursminutesseconds

这是一个拆分字符串并将参数传递给
Date()构造函数以创建Date对象的示例。

索引.js
// 👇️ Formatted as MM/DD/YYYY const str = '07/21/2022'; const [month, day, year] = str.split('/'); // 👇️ Create valid Date object const date = new Date(+year, month - 1, +day); console.log(date); // 👉️ Thu Jul 21 2022

日期字符串的格式为mm/dd/yyyy,但该方法适用于任何其他格式。

我们
在每个正斜杠上
拆分
字符串以获得子字符串数组。

索引.js
const str = '07/21/2022'; // 👇️ ['07', '21', '2022'] console.log(str.split('/'))

我们使用数组解构将月、日和年值分配给变量,并将它们传递给Date()构造函数。

创建Date对象后,比较日期所需要做的就是比较其getTime方法的输出。

索引.js
const str = '07/21/2022'; // 👇️ ['07', '21', '2022'] console.log(str.split('/')); const [month, day, year] = str.split('/'); // 👇️ Create valid Date object const date = new Date(+year, month - 1, +day); console.log(date); // 👉️ Thu Jul 21 2022 const now = new Date(); if (date.getTime() > now.getTime()) { console.log('date is in the future'); }

1请注意,我们在将它传递给Date()
构造函数时从月份
中减去。

这是因为,Date构造函数需要一个从零开始的值,其中 January = 0、February = 1、March = 2 等。