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 開始的月份傳入這兩次建構函數呼叫,就能得到當前月份或任何特定月份的第一天和最後一天,包括閏年。