年初取得は「1年のスタート地点を正確に取り出すための基盤ユーティリティ」
年初取得(その年の1月1日を求める処理)は、月初・月末と同じく業務システムで非常に多く使われます。 決算処理、年間レポート、年間集計、勤怠の年次計算、売上の年次分析など、 「この年の開始日はいつか?」を正確に求めることは、あらゆる年次ロジックの基盤です。
JavaScript の Date は柔軟ですが、年初取得を正しく行うためには 「年を取り出す → 月を 0(1月)にする → 日付を 1 にする」 という基本を理解する必要があります。
ここでは、年初取得の基本から、実務で使えるテンプレートまでを 例題とコードを交えて丁寧に解説します。
年初取得の基本は「月を 0、日付を 1 に固定する」こと
JavaScript の Date は次のように現在日時を取得できます。
const now = new Date();
JavaScript年初を求めるには、次の 3 ステップが基本です。
年初取得の基本ロジック
- 年を取り出す
- 月を 0(1月) にする
- 日付を 1 にする
コード例(基本形)
function getYearStart(date) {
const d = new Date(date);
return new Date(d.getFullYear(), 0, 1);
}
JavaScript重要ポイント
- 月は 0 始まりなので「1月=0」
- 日付を「1」に固定するだけで年初になる
- 時刻はそのまま残るが、年初取得では問題にならないことが多い
年初取得の例題
console.log(getYearStart("2026-08-15"));
// → 2026-01-01T00:00:00.000Z(環境により表示は異なる)
JavaScript深掘りポイント
- 年初は必ず「1月1日」なのでロジックが非常に安定する
- 月初・月末よりもシンプルで、バグが起きにくい
- 年次集計の基準日として使われることが多い
年初を「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 getYearStartYmd(date) {
return formatYmd(getYearStart(date));
}
JavaScript使用例
console.log(getYearStartYmd("2026-08-15"));
// → "2026-01-01"
JavaScript前年初・翌年初も簡単に求められる
年初取得のロジックを応用すると、 前年初・翌年初も簡単に求められます。
前年初
function getPrevYearStart(date) {
const d = new Date(date);
return new Date(d.getFullYear() - 1, 0, 1);
}
JavaScript翌年初
function getNextYearStart(date) {
const d = new Date(date);
return new Date(d.getFullYear() + 1, 0, 1);
}
JavaScript使用例
console.log(getPrevYearStart("2026-08-15")); // 2025-01-01
console.log(getNextYearStart("2026-08-15")); // 2027-01-01
JavaScript年初取得ユーティリティ(業務で使えるテンプレート)
実務では、年初関連の処理をまとめておくと非常に便利です。
export const YearUtil = {
pad2(n) {
return String(n).padStart(2, "0");
},
start(date) {
const d = new Date(date);
return new Date(d.getFullYear(), 0, 1);
},
startYmd(date) {
const d = this.start(date);
return `${d.getFullYear()}-${this.pad2(d.getMonth() + 1)}-${this.pad2(d.getDate())}`;
},
prevStart(date) {
const d = new Date(date);
return new Date(d.getFullYear() - 1, 0, 1);
},
nextStart(date) {
const d = new Date(date);
return new Date(d.getFullYear() + 1, 0, 1);
},
};
JavaScript使用例
import { YearUtil } from "./YearUtil.js";
console.log(YearUtil.start("2026-08-15")); // 2026-01-01
console.log(YearUtil.startYmd("2026-08-15")); // "2026-01-01"
console.log(YearUtil.prevStart("2026-08-15")); // 2025-01-01
console.log(YearUtil.nextStart("2026-08-15")); // 2027-01-01
JavaScript年初取得の“実務での落とし穴”を深掘りする
月は 0 始まりである(最重要)
new Date(2026, 0, 1); // 2026年1月1日
new Date(2026, 1, 1); // 2026年2月1日
JavaScript初心者が最も間違えるポイントです。
文字列形式によって結果が変わる
new Date("2026/08/15"); // Safari で失敗する可能性あり
JavaScript非標準形式はブラウザ差異が出るため、 ISO形式(YYYY-MM-DD)か手動パースを使うのが安全です。
時刻が残ると後続処理でズレることがある
年初取得では時刻は気にならないことが多いですが、 後続処理で「日付だけ比較したい」場合は時刻をリセットする必要があります。
d.setHours(0, 0, 0, 0);
JavaScript年初取得を使った実務テンプレート
年次レポートの期間を求める
function getYearlyRange(date) {
const start = YearUtil.start(date);
const end = YearUtil.nextStart(date);
return { start, end };
}
console.log(getYearlyRange("2026-08-15"));
// { start: 2026-01-01, end: 2027-01-01 }
JavaScript年初をキーにした集計処理
function groupByYear(records) {
const map = new Map();
records.forEach((r) => {
const key = YearUtil.startYmd(r.date);
if (!map.has(key)) map.set(key, []);
map.get(key).push(r);
});
return map;
}
JavaScriptまとめ:年初取得は「年次処理のスタート地点を正確に定義する技術」
年初取得を正しく扱うためのポイントは次の通りです。
- 年初は 1月1日であり、月は 0 始まり
- 年初は「年を取り出して、月を 0、日付を 1 にする」だけで求められる
- 前年初・翌年初は年を ±1 するだけで求められる
- 文字列形式は ISO(YYYY-MM-DD)が安全
- 業務ではユーティリティ化して再利用するのが最も安全
年次処理は業務システムの中心にある機能です。 その基盤となる年初取得をユーティリティ化しておくことで、 どの場面でも安定したロジックが書けるようになります。
