目录
Check if a Date is between Two Dates using JavaScript
使用 JavaScript 检查日期是否在两个日期之间
检查日期是否在两个日期之间:
- 使用
Date()
构造函数将日期转换为Date
对象。 - 检查日期是否大于开始日期且小于结束日期。
- 如果两个条件都满足,则日期介于两个日期之间。
const date = new Date('2022-09-24'); const start = new Date('2022-03-18'); const end = new Date('2022-11-22'); if (date > start && date < end) { console.log('✅ date is between the 2 dates'); } else { console.log('⛔️ date is not in the range'); }
我们将日期字符串传递给
Date()构造函数以创建
Date
对象。
Date()
构造函数未返回有效日期,则您必须以不同方式设置日期字符串的格式,例如yyyy-mm-dd
(更多内容见下文)。我们能够比较日期,因为在引擎盖下每个日期存储一个时间戳 – 1970 年 1 月 1 日和给定日期之间经过的毫秒数。
const date = new Date('2022-09-24'); // 👇️ 1663977600000 console.log(date.getTime());
getTime()
我们使用了
逻辑与 (&&)if
运算符,它在运行我们的块
之前检查是否满足两个条件。
处理无效的日期字符串
如果您在Date
从日期字符串创建有效对象时遇到困难,您可以将 2 种类型的参数传递给Date()
构造函数:
- 一个有效的 ISO 8601 字符串,格式为
YYYY-MM-DDTHH:mm:ss.sssZ
, 或者只是
YYYY-MM-DD
,如果你只有一个没有时间的日期。 - 多个逗号分隔的参数,表示
year
, (0 = 一月到month
11 = 十二月)day of the month
、、、hours
和minutes
。
seconds
这是一个拆分字符串并将参数传递给
Date()
构造函数以创建Date
对象的示例。
// 👇️ Formatted as MM/DD/YYYY const dateStr = '07/21/2022'; const [month, day, year] = dateStr.split('/'); // 👇️ Create valid Date object const date = new Date(+year, month - 1, +day); console.log(date); // 👉️ Thu Jul 21 2022
日期字符串的格式为mm/dd/yyyy
,但该方法适用于任何其他格式。
请注意,我们
在将它传递给构造函数时从月份中减去1
Date()
。
Date
构造函数需要一个从零开始的值,其中 January = 0、February = 1、March = 2 等。我们String.split每个正斜杠上的字符串以获得子字符串数组。
const str = '07/21/2022'; // 👇️ ['07', '21', '2022'] console.log(str.split('/'))
Date()
构造函数。从日期字符串创建Date
对象后,您可以像比较数字一样比较日期,因为Date
在比较发生之前对象会转换为时间戳。
// 👇️ Formatted as MM/DD/YYYY const dateStr = '07/21/2022'; const [month1, day1, year1] = dateStr.split('/'); const date = new Date(+year1, month1 - 1, +day1); const startStr = '03/24/2022'; const [month2, day2, year2] = startStr.split('/'); const startDate = new Date(+year2, month2 - 1, +day2); const endStr = '11/28/2022'; const [month3, day3, year3] = endStr.split('/'); const endDate = new Date(+year3, month3 - 1, +day3); if (date > startDate && date < endDate) { console.log('✅ date is between start and end dates'); } else { console.log('⛔️ date is NOT between start and end dates'); }
我们对每个日期重复该过程,并用正斜杠拆分每个日期以获得月、日和年值。
1
从月份的值中减去非常重要,因为Date()
构造函数期望月份的值从零开始(一月 = 0,二月 = 1,三月 = 2)。if
示例中的块运行是因为它在date
开始日期和结束日期之间。
在 JavaScript 中检查日期是否在 30 天内
检查日期是否在 30 天内:
- 从日期的时间戳中减去当前日期的时间戳。
- 将结果传递给
Math.abs()
函数。 - 将结果转换为天数。
- 检查日期之间的天数是否小于
30
。
const then = new Date('2022-01-21'); const now = new Date(); const msBetweenDates = Math.abs(then.getTime() - now.getTime()); // 👇️ convert ms to days hour min sec ms const daysBetweenDates = msBetweenDates / (24 * 60 * 60 * 1000); if (daysBetweenDates < 30) { console.log('date is within 30 days'); } else { console.log('date is NOT within 30 days'); }
getTime方法返回从 1970 年 1 月 1 日到给定日期之间经过的毫秒数。
我们必须从第二个日期的时间戳中减去第一个日期的时间戳。
我们使用Math.abs
函数将可能为负数的数转换为正数。
该函数采用的唯一参数是我们想要获得其绝对值的数字。
如果提供的数字为正数或零,则该Math.abs()
函数返回数字,如果为负数,则返回数字的负数。
console.log(Math.abs(-3)); // 👉️ 3 console.log(Math.abs(-3.5)); // 👉️ 3.5 console.log(Math.abs(-0)); // 👉️ 0
该msBetweenDates
变量存储两个日期之间的毫秒数。
下一步是将毫秒转换为天。
一旦我们有了两天之间的天数,我们所要做的就是检查天数是否小于以30
查看日期是否在30
天数之内。
请注意,这可能意味着该日期30
在未来几天或
30
过去几天内。
在 JS 中检查一个日期是否距离今天的日期超过 30 天
要检查某个日期是否距离今天的日期超过 30 天:
- 获取代表过去或未来 30 天日期的时间戳。
- 将结果与特定日期的时间戳进行比较。
// ✅ Check if the date is more than 30 days AGO function isMoreThan30DaysAgo(date) { // days hours min sec ms const thirtyDaysInMs = 30 * 24 * 60 * 60 * 1000; const timestampThirtyDaysAgo = new Date().getTime() - thirtyDaysInMs; if (timestampThirtyDaysAgo > date) { console.log('date is more than 30 days into the past'); return true; } else { console.log('date is NOT more than 30 days into the past'); return false; } } // 👇️ true console.log(isMoreThan30DaysAgo(new Date('2021-09-24'))); // 👇️ false console.log(isMoreThan30DaysAgo(new Date('2021-12-26'))); // ----------------------------------------------------- // ✅ Check if the date is more than 30 days IN THE FUTURE function isMoreThan30DaysInFuture(date) { // days hours min sec ms const thirtyDaysInMs = 30 * 24 * 60 * 60 * 1000; const timestampThirtyDaysInFuture = new Date().getTime() + thirtyDaysInMs; if (date > timestampThirtyDaysInFuture) { console.log('date is more than 30 days into the future'); return true; } else { console.log('date is NOT more than 30 days into the future'); return false; } } // 👇️ true console.log(isMoreThan30DaysInFuture(new Date('2029-04-25'))); // 👇️ false console.log(isMoreThan30DaysInFuture(new Date('2022-02-23')));
我们计算了以天为单位的毫秒数30
。
getTime方法返回自 Unix 纪元以来的毫秒数。
Date
可以得到从 1970 年 1 月 1 日到当前日期之间经过的毫秒数。如果我们减去以天为单位的毫秒数,我们会得到一个时间戳,它表示恰好几天前的30
日期和时间。30
类似地,如果我们将以天为单位的毫秒数添加30
到当前时间戳,我们将得到一个30
未来几天的日期。
如果您需要检查给定日期是否超过30
过去几天:
30
获取几天前日期的时间戳。- 检查几天前的时间戳是否
30
大于日期的时间戳。 - 如果是,则日期超过
30
过去几天。
如果您需要检查给定日期是否超过30
未来几天:
30
获取未来日期的时间戳。- 检查传入的日期是否大于
30
未来日期的时间戳。 - 如果是,则日期超过
30
未来几天。
在 JavaScript 中检查日期是否在 24 小时内
检查日期是否在 24 小时内:
- 从日期的时间戳中减去当前日期的时间戳。
- 将结果传递给
Math.abs()
函数。 - 将结果转换为小时。
- 检查日期之间的小时数是否小于
24
。
const then = new Date('2022-01-24T09:30:20'); const now = new Date(); const msBetweenDates = Math.abs(then.getTime() - now.getTime()); // 👇️ convert ms to hours min sec ms const hoursBetweenDates = msBetweenDates / (60 * 60 * 1000); console.log(hoursBetweenDates); if (hoursBetweenDates < 24) { console.log('date is within 24 hours'); } else { console.log('date is NOT within 24 hours'); }
getTime方法返回从 1970 年 1 月 1 日到给定日期之间经过的毫秒数。
我们必须从第二个日期的时间戳中减去第一个日期的时间戳。
我们使用Math.abs()
方法将可能为负数的数转换为正数。
该函数采用的唯一参数是我们想要获得其绝对值的数字。
如果提供的数字为正数或零,则该Math.abs
函数返回数字,如果为负数,则返回数字的负数。
console.log(Math.abs(-6)); // 👉️ 6 console.log(Math.abs(-6.5)); // 👉️ 6.5 console.log(Math.abs(-0)); // 👉️ 0
该msBetweenDates
变量存储两个日期之间的毫秒数。
下一步是将毫秒转换为小时。
24
查看日期是否在小时内。 24
请注意,这可能意味着该日期24
在未来几小时内或
24
过去几小时内。
使用 JavaScript 检查日期是否小于 24 小时前
检查日期是否小于 24 小时前:
- 将 24 小时转换为毫秒。
- 获取表示 24 小时前时间的时间戳。
- 检查日期的时间戳是否大于 24 小时前的时间戳。
function isLessThan24HourAgo(date) { // 👇️ hour min sec milliseconds const twentyFourHrInMs = 24 * 60 * 60 * 1000; const twentyFourHoursAgo = Date.now() - twentyFourHrInMs; return date > twentyFourHoursAgo; } console.log(isLessThan24HourAgo(new Date())); // 👉️ true console.log(isLessThan24HourAgo(new Date('2022-01-25'))); // 👉️ false
我们创建了一个可重用的函数,它将一个Date
对象作为参数并检查日期是否早于 24 小时前。
true
未来的日期。如果您只想检查日期是否早于 24 小时并且不在未来,请向下滚动到下一个代码片段。第一步是计算 24 小时有多少毫秒。
Date.now
()
方法返回自 1970 年 1 月 1 日午夜以来经过的毫秒数。
通过从时间戳中减去24
以毫秒为单位的小时数,我们得到了 24 小时前的时刻。
我们能够将日期与时间戳进行比较,因为在引擎盖下每个日期都存储一个时间戳 – 从 1970 年 1 月 1 日到给定日期之间经过的毫秒数。
const date = new Date('2022-07-24'); // 👇️ 1658620800000 console.log(date.getTime());
getTime()
检查日期是否小于 24 小时前且不在未来
如果您需要检查某个日期是否早于 24 小时前且不在未来,请添加一个条件来检查该日期是否小于或等于当前时间戳。
function isLessThan24HourAgo(date) { // 👇️ hour min sec milliseconds const twentyFourHrInMs = 24 * 60 * 60 * 1000; const twentyFourHoursAgo = Date.now() - twentyFourHrInMs; return date > twentyFourHoursAgo && date <= Date.now(); } console.log(isLessThan24HourAgo(new Date())); // 👉️ true console.log(isLessThan24HourAgo(new Date('2045-09-24'))); // 👉️ false
未来的任何日期都不会满足第二个条件。
逻辑与 (&&) 运算符只有true
在两个条件都满足时才会返回,否则false
返回。
我还写了一篇关于
如何将时间格式更改为 24 小时制的文章。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: