使用 JavaScript 比较两个日期字符串
Compare two Date strings using JavaScript
比较两个日期字符串:
- 将字符串传递给
Date()
构造函数以创建 2 个Date
对象。 - 比较根据
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()
构造函数:
- 一个有效的 ISO 8601 字符串,格式为
YYYY-MM-DDTHH:mm:ss.sssZ
, 或者只是
YYYY-MM-DD
,如果你只有一个没有时间的日期。 - 多个逗号分隔的参数,表示
year
,month
(0 = 一月到 11 = 十二月)
day of the month
、、、hours
和。minutes
seconds
这是一个拆分字符串并将参数传递给
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 等。