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
の数値を返すため
Memo:「月」の指定方法等書いてる
ということで未来の日時を取得するためには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 (日本標準時)
結果が異なるしちゃんと認識してるね
うるう年考えてそれ用の記述が必要なのか気になったので確認してみた