HOWTO · JavaScript

使用 JavaScript 获取当月的第一天和最后一天

本教程展示如何使用 JavaScript 中的方法获取当月的第一天和最后一天。

本页内容

本 JavaScript 教程讲解如何获取一个月的第一天和最后一天。许多项目都需要找出当月的第一天和最后一天的日期——例如报表、计费周期和日期选择器。

有两个 Date 方法是基础:getFullYear() 告诉我们年份,getMonth() 告诉我们月份。有了这两个值,Date 构造函数就可以直接构建出边界日期。

在 JavaScript 中使用 Date.getFullYear() 方法

Date.getFullYear() 方法根据本地时间返回指定日期的年份。注意,示例使用 Date(year, monthIndex, day) 构造函数来构建日期;月份索引从 0 开始,所以 0 表示一月。

const randomDate = new Date(2018, 0, 20);
console.log(randomDate.getFullYear());

输出:

2018

在 JavaScript 中使用 Date.getMonth() 方法

getMonth() 方法以从 0 开始的值返回指定日期的月份:0 表示一年中的第一个月(一月),11 表示最后一个月(十二月)。

const randomDate = new Date(2018, 0, 20);
console.log(randomDate.getMonth());

输出:

0

我们必须记住,JavaScript 中日期的月份编号是从 0 开始的。所以一月是月份 0,十二月是月份 11。

使用 JavaScript 获取一个月的第一天和最后一天

两次构造函数调用就能得到边界日期:

  • 第一天是 new Date(year, month, 1)——同一个月的第 1 天。
  • 最后一天是 new Date(year, month + 1, 0)——下一个月的第 0 天。第 0 天会从下个月的第一天回退一天,恰好落在我们想要的月份的最后一天,无论该月有多少天。

下面的函数把两者打包在一起,示例将其应用于 2018 年 1 月:

function getMonthRange(date) {
  const firstDay = new Date(date.getFullYear(), date.getMonth(), 1);
  const lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);
  return { firstDay, lastDay };
}

const january2018 = getMonthRange(new Date(2018, 0, 20));
console.log(january2018.firstDay.toDateString());
console.log(january2018.lastDay.toDateString());

输出:

Mon Jan 01 2018
Wed Jan 31 2018

要获取当前月份的第一天和最后一天,传入当前日期即可:getMonthRange(new Date())。同一个函数适用于任何月份——你永远不需要查一个月有多少天,因为第 0 天的回退会同样处理 28、29、30 和 31 天的月份。闰年 2024 年的 2 月展示了这一点:

const february2024 = getMonthRange(new Date(2024, 1, 15));
console.log(february2024.firstDay.toDateString());
console.log(february2024.lastDay.toDateString());

输出:

Thu Feb 01 2024
Thu Feb 29 2024

结论

一个月的第一天是 new Date(year, month, 1),最后一天是 new Date(year, month + 1, 0)——即下个月第一天的前一天。把从 getFullYear() 和 getMonth() 得到的年份和从 0 开始的月份传入这两次构造函数调用,就能得到当前月份或任何特定月份的第一天和最后一天,包括闰年。