使用 JavaScript 检查日期是否在两个日期之间

目录

Check if a Date is between Two Dates using JavaScript

  1. 使用 JavaScript 检查日期是否在两个日期之间
  2. 在 JavaScript 中检查日期是否在 30 天内
  3. 在 JavaScript 中检查日期是否在 24 小时内

使用 JavaScript 检查日期是否在两个日期之间

检查日期是否在两个日期之间:

  1. 使用Date()构造函数将日期转换为Date对象。
  2. 检查日期是否大于开始日期且小于结束日期。
  3. 如果两个条件都满足,则日期介于两个日期之间。
索引.js
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 日和给定日期之间经过的毫秒数。

索引.js
const date = new Date('2022-09-24'); // 👇️ 1663977600000 console.log(date.getTime());
每个日期都在后台存储一个时间戳,因此默认行为是比较日期的时间戳,即使您没有在每个日期显式调用该方法也是如此。 getTime()

我们使用了
逻辑与 (&&)if运算符,它在运行我们的块
之前检查是否满足两个条件。

如果日期大于开始日期且小于结束日期,则它介于两个日期之间。

处理无效的日期字符串

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

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

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

索引.js
// 👇️ 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,但该方法适用于任何其他格式。

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

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

我们String.split每个正斜杠上的字符串以获得子字符串数组。

索引.js
const str = '07/21/2022'; // 👇️ ['07', '21', '2022'] console.log(str.split('/'))
我们使用数组解构将月、日和年值分配给变量,并将它们传递给Date()构造函数。

从日期字符串创建Date对象后,您可以像比较数字一样比较日期,因为Date在比较发生之前对象会转换为时间戳。

索引.js
// 👇️ 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 天内:

  1. 从日期的时间戳中减去当前日期的时间戳。
  2. 将结果传递给Math.abs()函数。
  3. 将结果转换为天数。
  4. 检查日期之间的天数是否小于30
索引.js
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()函数返回数字,如果为负数,则返回数字的负数。

索引.js
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 天:

  1. 获取代表过去或未来 30 天日期的时间戳。
  2. 将结果与特定日期的时间戳进行比较。
索引.js
// ✅ 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 小时内:

  1. 从日期的时间戳中减去当前日期的时间戳。
  2. 将结果传递给Math.abs()函数。
  3. 将结果转换为小时。
  4. 检查日期之间的小时数是否小于24
索引.js
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函数返回数字,如果为负数,则返回数字的负数。

索引.js
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 小时前:

  1. 将 24 小时转换为毫秒。
  2. 获取表示 24 小时前时间的时间戳。
  3. 检查日期的时间戳是否大于 24 小时前的时间戳。
索引.js
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 小时前的时刻。

如果传入的日期大于 24 小时前的时间戳,则该日期小于 24 小时或未来。

我们能够将日期与时间戳进行比较,因为在引擎盖下每个日期都存储一个时间戳 – 从 1970 年 1 月 1 日到给定日期之间经过的毫秒数。

索引.js
const date = new Date('2022-07-24'); // 👇️ 1658620800000 console.log(date.getTime());
每个日期都在后台存储一个时间戳,因此默认行为是比较日期的时间戳,即使您没有在每个日期显式调用该方法也是如此。 getTime()

检查日期是否小于 24 小时前且不在未来

如果您需要检查某个日期是否早于 24 小时前且不在未来,请添加一个条件来检查该日期是否小于或等于当前时间戳。

索引.js
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
我们的第一个条件检查日期的时间戳是否大于 24 小时前的时间戳,第二个条件检查日期的时间戳是否小于或等于当前时间戳。

未来的任何日期都不会满足第二个条件。

逻辑与 (&&) 运算符只有true在两个条件都满足时才会返回,否则false返回。

我还写了一篇关于
如何将时间格式更改为 24 小时制的文章。

额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: