このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

Date.prototype.setMonth()

Baseline
広く利用可能

この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2015年7月以降、すべてのブラウザーで利用可能です。

setMonth() は Date インスタンスのメソッドで、現在設定されている年に基づき、指定された日時の「月」を設定します。

試してみましょう

const event = new Date("August 19, 1975 23:15:30");

event.setMonth(3);

console.log(event.getMonth());
// 予想される結果: 3

console.log(event);
// 予想される結果: "Sat Apr 19 1975 23:15:30 GMT+0100 (CET)"
// メモ: タイムゾーンは変わる可能性があります

構文

js
setMonth(monthValue)
setMonth(monthValue, dateValue)

引数

monthValue

月を表す整数で、 0 は 1 月、 1 を 2 月、というようになります。

dateValue 省略可

「日」を表す 1 から 31 までの間の整数値。

返値

その場で Date オブジェクトを変更し、新しいタイムスタンプを返します。引数が NaN (または undefined など、 NaN に変換されるその他の値)の場合、日付は無効な日時に設定され、 NaN が返されます。

解説

dateValue 引数を指定しなかった場合、getDate() メソッドから返される値が使われます。

指定した値が期待される日付の範囲外の場合、それに応じて setMonth() が Date オブジェクトの日付情報の更新を試みます。例えば、monthValue に 15 を指定した場合、年に 1 が加算され、月が 3 になります。

このメソッドの動作は、ある特定の月の日にちに影響を与えます。 概念上は、その月の日数を、引数として与えた新しい月の初日に加え、新しい日付を返します。 例えば、現在の値が 2016 年 1 月 31 日である場合、1 を引数として setMonth を呼び出すと 2016 年 3 月 2 日が返ってきます。 これは、2016 年の 2 月が 29 日間しかないからです。

setMonth() は現地時間を基に動作するため、夏時間 (DST) の境界を越えると、予想外の経過時間が算出されることがあります。例えば、日付の設定によって「春の移行期間(1 時間遅れる)」を跨ぐ場合、新しい日付と古い日付のタイムスタンプの差は、名目上の日数の差に24時間を掛けた値よりも 1 時間少なくなります。逆に、夏時間終了(1 時間進む)の移行期間を越えた場合は、1 時間分多く加算されます。日付を一定の時間分調整する必要がある場合は、setUTCMonth() または setTime() を考えてみることを検討してください。

新しい現地時刻がオフセットの移行期間内に該当する場合、正確な時刻は Temporal の disambiguation: "compatible" オプションと同じ動作を使用して算出されます。つまり、現地時刻が 2 つの瞬間に該当する場合は、より早い方が選択されます。現地時刻が存在しない場合(ギャップがある場合)、ギャップの期間分だけ先へ進みます。

例

setMonth() の使用

js
const theBigDay = new Date();
theBigDay.setMonth(6);

// 月末の移行にご注意ください
const endOfMonth = new Date(2016, 7, 31);
endOfMonth.setMonth(1);
console.log(endOfMonth); // Wed Mar 02 2016 00:00:00

仕様書

仕様書
ECMAScript® 2027 Language Specification
# sec-date.prototype.setmonth

ブラウザーの互換性

関連情報