【GAS】Nヶ月後を求める

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点は把握が必要です。

  1. getMonth()は0~11で月を表す
  2. 年越しを処理できるように、dateを操作してから月を出力すること

ここを忘れているとエラーになってしまいますので、気をつけてくださいね。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

都内Edtech企業のコーポレートエンジニア。
業務改善・自動化についての開発をしています。
エンジニア歴9年、コーポレートエンジニア歴4年。

目次