年末取得は「1年の終わりを正確に定義するための重要ユーティリティ」
年初取得と並んで 年末取得(その年の12月31日を求める処理)は、業務システムで非常に多く使われます。 決算処理、年間レポート、年間集計、勤怠の年次計算、売上の年次分析など、 「この年の終わりはいつか?」を正確に求めることは、あらゆる年次ロジックの基盤です。
JavaScript の Date は柔軟ですが、年末取得を正しく行うためには 「翌年の年初から1日戻る」というテクニックを理解する必要があります。 この方法は月末取得のロジックと同じで、非常に強力です。
年末取得の基本は「翌年の年初から1日戻る」こと
JavaScript の Date は次のように扱えます。
new Date(year, month, day)
JavaScriptここで重要なのは、 月は 0 始まり(1月=0、12月=11) という仕様です。
年末取得の黄金ルール
翌年の 1 月 1 日(=month=0)を作り、そこから day=0 を指定する。
これだけで、 12月31日を確実に取得できます。
コード例(基本形)
function getYearEnd(date) {
const d = new Date(date);
return new Date(d.getFullYear() + 1, 0, 0);
}
JavaScriptなぜ day=0 が「前月の月末」になるのか
JavaScript の Date は「日付が 0 の場合、前月の末日」として扱います。 この仕様を利用すると、年末取得が非常に簡単になります。
年末取得の例題
console.log(getYearEnd("2026-08-15"));
// → 2026-12-31T00:00:00.000Z(環境により表示は異なる)
JavaScript深掘りポイント
- 年末は必ず「12月31日」なのでロジックが安定する
- うるう年でも年末は変わらないため、追加ロジック不要
- 月末取得と同じ「day=0」テクニックが使える
年末を「yyyy-mm-dd」形式で返すユーティリティ
業務では「年末を文字列で返す」場面が非常に多いです。 レポート、ログ、API パラメータなど、文字列形式が求められることが多いためです。
function pad2(n) {
return String(n).padStart(2, "0");
}
function formatYmd(date) {
return `${date.getFullYear()}-${pad2(date.getMonth() + 1)}-${pad2(date.getDate())}`;
}
function getYearEndYmd(date) {
return formatYmd(getYearEnd(date));
}
JavaScript使用例
console.log(getYearEndYmd("2026-08-15"));
// → "2026-12-31"
JavaScript前年末・翌年末も簡単に求められる
年末取得のロジックを応用すると、 前年末・翌年末も簡単に求められます。
前年末
function getPrevYearEnd(date) {
const d = new Date(date);
return new Date(d.getFullYear(), 0, 0);
}
JavaScript翌年末
function getNextYearEnd(date) {
const d = new Date(date);
return new Date(d.getFullYear() + 2, 0, 0);
}
JavaScript使用例
console.log(getPrevYearEnd("2026-08-15")); // 2025-12-31
console.log(getNextYearEnd("2026-08-15")); // 2027-12-31
JavaScript年末取得ユーティリティ(業務で使えるテンプレート)
実務では、年末関連の処理をまとめておくと非常に便利です。
export const YearEndUtil = {
pad2(n) {
return String(n).padStart(2, "0");
},
end(date) {
const d = new Date(date);
return new Date(d.getFullYear() + 1, 0, 0);
},
endYmd(date) {
const d = this.end(date);
return `${d.getFullYear()}-${this.pad2(d.getMonth() + 1)}-${this.pad2(d.getDate())}`;
},
prevEnd(date) {
const d = new Date(date);
return new Date(d.getFullYear(), 0, 0);
},
nextEnd(date) {
const d = new Date(date);
return new Date(d.getFullYear() + 2, 0, 0);
},
};
JavaScript使用例
import { YearEndUtil } from "./YearEndUtil.js";
console.log(YearEndUtil.end("2026-08-15")); // 2026-12-31
console.log(YearEndUtil.endYmd("2026-08-15")); // "2026-12-31"
console.log(YearEndUtil.prevEnd("2026-08-15")); // 2025-12-31
console.log(YearEndUtil.nextEnd("2026-08-15")); // 2027-12-31
JavaScript年末取得の“実務での落とし穴”を深掘りする
月は 0 始まりである(最重要)
new Date(2026, 0, 0); // 2025-12-31
new Date(2026, 1, 0); // 2026-01-31
JavaScript初心者が最も間違えるポイントです。
文字列形式によって結果が変わる
new Date("2026/08/15"); // Safari で失敗する可能性あり
JavaScript非標準形式はブラウザ差異が出るため、 ISO形式(YYYY-MM-DD)か手動パースを使うのが安全です。
時刻が残ると後続処理でズレることがある
年末取得では時刻は気にならないことが多いですが、 後続処理で「日付だけ比較したい」場合は時刻をリセットする必要があります。
d.setHours(0, 0, 0, 0);
JavaScript年末取得を使った実務テンプレート
年次レポートの期間を求める
function getYearlyRange(date) {
const start = new Date(date.getFullYear(), 0, 1);
const end = YearEndUtil.end(date);
return { start, end };
}
console.log(getYearlyRange("2026-08-15"));
// { start: 2026-01-01, end: 2026-12-31 }
JavaScript年末をキーにした集計処理
function groupByYearEnd(records) {
const map = new Map();
records.forEach((r) => {
const key = YearEndUtil.endYmd(r.date);
if (!map.has(key)) map.set(key, []);
map.get(key).push(r);
});
return map;
}
JavaScriptまとめ:年末取得は「年次処理の終点を正確に定義する技術」
年末取得を正しく扱うためのポイントは次の通りです。
- 年末は 翌年の年初から1日戻ることで確実に求められる
- 月は 0 始まりである
- うるう年でも年末は変わらないため追加ロジック不要
- 文字列形式は ISO(YYYY-MM-DD)が安全
- 業務ではユーティリティ化して再利用するのが最も安全
年次処理は業務システムの中心にある機能です。 その基盤となる年末取得をユーティリティ化しておくことで、 どの場面でも安定したロジックが書けるようになります。

