1. 導入
JavaScriptで日付を扱う際、特定の年だけを変更したい場面は非常に多いです。「来年の今日の日付を取得したい」「ユーザーが選択した年にデータを更新したい」といったケースで、日付オブジェクトの年部分だけを安全に書き換えるために不可欠なのが Date.prototype.setFullYear メソッドです。このメソッドを正しく理解することで、日付計算に伴うバグを未然に防ぐことができます。
2. 基礎知識
JavaScriptの Date オブジェクトは、内部的に「1970年1月1日 00:00:00 UTC」からの経過ミリ秒数で日時を管理しています。setFullYear は、既存のDateオブジェクトが保持している「年」の値を、指定した数値に上書きするためのメソッドです。
重要なポイントは、このメソッドが「破壊的」であるという点です。新しい日付オブジェクトを作成するのではなく、呼び出し元のオブジェクトそのものを変更するという仕様を理解しておく必要があります。
3. 実装/解決策
setFullYear は、第一引数に「年」を数値で指定します。また、オプションとして「月」と「日」を同時に指定することも可能です。これを利用すると、年を更新すると同時に月日もリセットできるため、コードを簡潔に書くことができます。
基本構文:
dateObj.setFullYear(yearValue[, monthValue[, dayValue]])
4. サンプルプログラム
以下のコードは、現在の日付から「来年の同じ日付」を取得し、さらに「来年の元旦」へ変更する例です。
// 現在の日時を取得
const today = new Date();
console.log("今日:", today.toLocaleDateString());
// 1. 年だけを来年に変更(setFullYearは元のオブジェクトを更新します)
today.setFullYear(today.getFullYear() + 1);
console.log("来年の今日:", today.toLocaleDateString());
// 2. 年を2025年にし、月を1月(0始まり)、日を1日に設定
const newYearDay = new Date();
newYearDay.setFullYear(2025, 0, 1);
console.log("2025年の元旦:", newYearDay.toLocaleDateString());
5. 応用・注意点
現場で活用する際に特に注意すべき点が2つあります。
一つ目は、「月は0から始まる」という点です。JavaScriptのDateオブジェクトでは、1月が0、12月が11となります。setFullYearで月を指定する際、直感的に「1」と書くと2月になってしまうため注意が必要です。
二つ目は、「日付の自動繰り上げ」です。例えば「1月31日」の状態で setFullYear を使って「2月」に設定した場合、2月には31日が存在しないため、自動的に「3月3日(または2日)」へ日付が繰り上げられます。意図しない日付のズレを防ぐため、月や日を変更する場合は、日付の正当性を確認するロジックを挟むか、新しいDateオブジェクトを生成して計算することをお勧めします。