web関連

【javascript】Dateオブジェクトで未来の日時を取得するときの注意

Dateオブジェクトを使って未来の日時を取得するときに少し注意する必要があったのでメモ

未来の日時を取得する時の注意

特定の日時(2020年12月1日)から90日後の日時を取得する例

const date = new Date(2020, 11, 1); //  Tue Dec 01 2020 00:00:00 GMT+0900 (日本標準時)
const day = date.getDate() + 90;// 取得した「日」に90を加算

console.log(day);// 91
console.log(date);// Tue Dec 01 2020 00:00:00 GMT+0900 (日本標準時)

というように加算して取得しようとすると単純に数字として可算をされてしまう
2020年12月1日を取得するのにnew Date(2020, 11, 1)と指定しているのは「月」は0–11の数値を返すため

ということで未来の日時を取得するためにはsetDateメソッドを使う必要がある

setDate()を使って未来の日時を取得する方法

setDateメソッドはDateオブジェクトのメソッドだから後ろにカンマで繋げて使う必要がある

const date = new Date(2020, 11, 1); //  Tue Dec 01 2020 00:00:00 GMT+0900 (日本標準時)
const day = date.setDate(date.getDate() + 90);// 取得した「日」に90を加算

console.log(day);// 1617202800000(90日後のタイムスタンプ)
console.log(date);// Mon Mar 01 2021 00:00:00 GMT+0900 (日本標準時)
console.log(date.getDate());// 1(日)
console.log(date.getFullYear());// 2021(年)
console.log(date.getMonth()+1);// 3(月)

setDateメソッドを使って90日加算した後に変数dayを出力しても日時は取得することはできないので再度date.getDate()と指定して取得する必要がある
また、date.getFullYear()date.getMonth()で90日後の「年」や「月」も取得できたりする

どうにもsetDateメソッドはタイムスタンプとして値を返すみたい
タイムスタンプを日時に変換する方法はDateオブジェクト使えばできる

new Date(day);// Mon Mar 01 2021 00:00:00 GMT+0900 (日本標準時)

setDateメソッドは日付専用でsetMonth()やsetHours()と個々に用意されてるので注意

おまけ:Dateオブジェクトがうるう年を認識しているのか確認

2020年はうるう年なので2月29日があって2021年は2月29日がないけどDateオブジェクトってうるう年を認識しているのかどうかの確認

// 90日後がうるう年
const date = new Date(2019, 11, 1); // Sun Dec 01 2019 00:00:00 GMT+0900 (日本標準時)
const day = date.setDate(date.getDate() + 90);// 取得した「日」に90を加算
console.log(date);// Sat Feb 29 2020 00:00:00 GMT+0900 (日本標準時)
// 90日後がうるう年じゃない
const date = new Date(2020, 11, 1); // Tue Dec 01 2020 00:00:00 GMT+0900 (日本標準時)
const day = date.setDate(date.getDate() + 90);// 取得した「日」に90を加算
console.log(date);// Mon Mar 01 2021 00:00:00 GMT+0900 (日本標準時)

結果が異なるしちゃんと認識してるね
うるう年考えてそれ用の記述が必要なのか気になったので確認してみた

Leave a Comment

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。