JavaScriptで月末・月初を取得する方法|初心者でもわかる日付操作
先生と生徒の会話形式で理解しよう
生徒
「先生、JavaScriptで今月の月末や月初を簡単に取得する方法はありますか?」
先生
「あります。Dateオブジェクトを使うと、月末や月初の日付を簡単に計算できます。方法はとてもシンプルです。」
生徒
「具体的にはどうやってやるんですか?」
先生
「順番に見ていきましょう。まずは月初から説明します。」
1. 月初を取得する方法
月初は、単純にsetDate(1)を使うだけで取得できます。setDateは日を設定するメソッドです。
const today = new Date();
const firstDayOfMonth = new Date(today);
firstDayOfMonth.setDate(1);
console.log("今月の月初:", firstDayOfMonth);
今月の月初: Sat Nov 01 2025 ...
これだけで、その月の1日を簡単に取得できます。
2. 月末を取得する方法
月末は少しトリックがあります。翌月の1日から1日引くと、今月の最終日が簡単に求められます。
const year = today.getFullYear();
const month = today.getMonth(); // 0:1月, 11:12月
const lastDayOfMonth = new Date(year, month + 1, 0);
console.log("今月の月末:", lastDayOfMonth);
今月の月末: Sun Nov 30 2025 ...
ここでポイントはmonth + 1にして日を0にすることです。JavaScriptでは日を0に設定すると前月の最終日になります。
3. 月初・月末を関数化して使いやすくする
よく使う操作なので、関数にしておくと便利です。
function getFirstDay(year, month){
return new Date(year, month, 1);
}
function getLastDay(year, month){
return new Date(year, month + 1, 0);
}
console.log("月初:", getFirstDay(year, month));
console.log("月末:", getLastDay(year, month));
月初: Sat Nov 01 2025 ...
月末: Sun Nov 30 2025 ...
これで毎回同じ処理を書かなくても簡単に呼び出せます。
4. カレンダーアプリでの活用例
月初と月末を使うと、その月の日付全てをループで表示できます。例えば、カレンダーのように1日から月末までを順番に表示することが可能です。
const firstDay = getFirstDay(year, month);
const lastDay = getLastDay(year, month);
for(let d = firstDay.getDate(); d <= lastDay.getDate(); d++){
const date = new Date(year, month, d);
console.log(date.toDateString());
}
Sat Nov 01 2025
Sun Nov 02 2025
Mon Nov 03 2025
...
Sun Nov 30 2025
この方法を使えば、カレンダー的な日付表示が簡単に作成できます。
5. 応用:翌月・前月の月初・月末
翌月や前月の月初・月末も簡単に取得できます。月の値を+1や-1にすればOKです。
const nextMonthFirst = getFirstDay(year, month + 1);
const nextMonthLast = getLastDay(year, month + 1);
const prevMonthFirst = getFirstDay(year, month - 1);
const prevMonthLast = getLastDay(year, month - 1);
console.log("翌月の月初:", nextMonthFirst);
console.log("翌月の月末:", nextMonthLast);
console.log("前月の月初:", prevMonthFirst);
console.log("前月の月末:", prevMonthLast);
翌月の月初: Mon Dec 01 2025 ...
翌月の月末: Wed Dec 31 2025 ...
前月の月初: Wed Oct 01 2025 ...
前月の月末: Fri Oct 31 2025 ...
これで、任意の月の月初・月末も簡単に取得できます。
6. 注意点:タイムゾーンと時間の設定
日付を扱うときは、時間やタイムゾーンの影響でズレが出る場合があります。日だけを扱いたい場合は時間を0:00に揃えると安全です。
const safeFirstDay = new Date(year, month, 1, 0, 0, 0);
const safeLastDay = new Date(year, month + 1, 0, 0, 0, 0);
こうすると、日付計算で誤差が発生しにくくなります。