GASのDateオブジェクトを利用した日付処理についての記録です。
目次
使い方の基本
まずDateオブジェクトの基本
function dateSample1(){
// 今日(Date()が呼ばれた日時)を取得する
let date = new Date()
console.log(date)
// 結果 -> Mon Nov 20 2023 16:14:52 GMT+0900 (Japan Standard Time)
let year = date.getFullYear()
let month = date.getMonth()
let day = date.getDate()
console.log(year)
// -> 2023
console.log(month)
// -> 10
console.log(day)
// -> 20
}
これが基本的な使い方です。一点覚える必要があるのが、getMonth()は0スタート(1月が0)となることです。つまり、1月~12月を0~11で表しています。
サンプルコードで最初に取得した実行日は11/20になっていますが、getMonth()の戻り値は10になっていますね。これは仕様なので、把握しておかないと危険です。
1ヶ月後を求める場合
翌月を求める場合、以下のような書き方をします。
function dateSample2(){
// 今日(Date()が呼ばれた日時)を取得する
let date = new Date()
console.log(date)
// -> Mon Nov 20 2023 23:50:35 GMT+0900 (Japan Standard Time)
// 1, 元の変数に対して操作する場合
date.setMonth(date.getMonth() + 1) //1ヶ月後にする
console.log(date)
// -> Wed Dec 20 2023 23:50:35 GMT+0900 (Japan Standard Time)
// 2. 新しい変数に代入する場合
let nextMonth = new Date(date.getFullYear(), date.getMonth()+1, date.getDate())
console.log(date)
// -> Wed Dec 20 2023 23:50:35 GMT+0900 (Japan Standard Time)
}
このように、getMonth() + 1とすることで翌月を求めることが可能です。
年をまたぐ場合も問題なし
ちなみに、年をまたぐ場合でも問題なく処理されます。
試しに11月時点で、3ヶ月後(翌年2月)を求めてみます。
function dateSample3(){
// 今日(Date()が呼ばれた日時)を取得する
let date = new Date()
console.log(date)
// -> Mon Nov 20 2023 23:56:48 GMT+0900 (Japan Standard Time)
// 年をまたぐ場合でもうまく処理してくれる
date.setMonth(date.getMonth() + 3) //3ヶ月後にする
console.log(date)
// -> Tue Feb 20 2024 23:56:48 GMT+0900 (Japan Standard Time)
}
このように、getFullYear()の方を操作しなくてもうまく処理してくれます。助かる。
この書き方はダメ
最後に、たまにやってしまいそうな失敗パターンを記載します。
それは、date型を操作しないで足し算で月だけを求めようとするやり方です。
function dateSample4(){
// 今日(Date()が呼ばれた日時)を取得する
let date = new Date()
console.log(date)
// -> Mon Nov 20 2023 23:56:48 GMT+0900 (Japan Standard Time)
// 3ヶ月後を何も考えずに足すと失敗する
console.log(date.getMonth() + 4) //月は0スタートなので、この書き方だと3ヶ月後は+4となる
// -> 14
}
あくまでgetMonth()は数値を返すだけなので、+4して3ヶ月後を求めようとしても年越し処理に失敗します。ありがちなうっかりミスなので、気をつけてくださいね。
私も何回やったことか……
まとめ: 簡単だけど細かいところは把握しておきたい
Nヶ月後を求める処理は簡単ですが、以下の2点は把握が必要です。
- getMonth()は0~11で月を表す
- 年越しを処理できるように、dateを操作してから月を出力すること
ここを忘れているとエラーになってしまいますので、気をつけてくださいね。