GASのDateオブジェクトを使った日付処理のメモ。請求書作成などに必要な「未来日付」の算出に便利です。
この記事では「今日の○ヶ月後は何月何日?」「今日の○日後は何月何日?」をGASで計算するスクリプトを紹介します。
【基本】今日の「月」「日」を取得する
まずはDateオブジェクトの基本を確認しましょう。
・Dateオブジェクト.getMonth()
Dateオブジェクトの「月」を取得する(0-11)
・Dateオブジェクト.getDate()
Dateオブジェクトの「日」を取得する(1-31)
Dateオブジェクトの日付が「2019年10月19日」の場合の実行結果です。
1 2 3 4 5 6 7 8 9 10 11 12 |
function sample1() { //※このスクリプトは「2019/10/19」に実行してます var date = new Date(); var month = date.getMonth(); var day = date.getDate(); Logger.log(month); //9(=10月) Logger.log(day); //19 } |
※getMonthメソッドの戻り値は、「1月~12月」が「0~11」になります。10月の場合「9」が返ります。
今日の「Nヶ月後の日付」を求める
今日の「3ヶ月後の日付」を求める方法です。
・Dateオブジェクト.setMonth(引数)
Dateオブジェクトの「月」を設定する
※今年1月を 0 とした場合の「nヶ月後」を設定します
まず、getMonthメソッドで現在の「月」を取得します。10月の場合は「9」が返ります。
「今日の3ヶ月後」を求めるので、getMonthメソッドの戻り値を +3 します。Dateオブジェクトの「月」が3ヶ月後になります。
1 2 3 4 5 6 7 8 9 10 11 |
function sample2() { //※このスクリプトは「2019/10/19」に実行してます var date = new Date(); date.setMonth(date.getMonth() + 3); //3ヶ月後 var YYYYMMDD = Utilities.formatDate(date, 'JST', 'yyyy/MM/dd'); Logger.log(YYYYMMDD); //2020/01/19 } |
たとえば +6 とすれば、6ヶ月後の日付になります。
今日の「N日後の日付」を求める
今日の「90日後の日付」を求める方法です。「3ヶ月後」と「90日後」は違いますからね。
・Dateオブジェクト.setDate(引数)
Dateオブジェクトの「日」を設定する
※今月1日を0とした場合の「n日後」を設定します
まず、getDateメソッドで現在の「日」を取得します。Dateオブジェクトが19日の場合、「19」が返ります。
「今日の90日後」を求めるので、getDateメソッドの戻り値を +90 します。Dateオブジェクトの「日」が90日後になります。
1 2 3 4 5 6 7 8 9 10 11 |
function sample3() { //※このスクリプトは「2019/10/19」に実行してます var date = new Date(); date.setDate(date.getDate() + 90); var YYYYMMDD = Utilities.formatDate(date, 'JST', 'yyyy/MM/dd'); Logger.log(YYYYMMDD); //2020/01/17 } |
【解説】今月1日を0とした場合の「n日後」を設定、とは?
Dateオブジェクトが「2019年10月19日」の場合、getDateメソッドの返り値は 19 です。 19 + 90 は 109 です。
つまり、
1 |
date.setDate(date.getDate() + 90); |
は
1 |
date.setDate(109); |
と同じ意味になります。
setDateメソッドは、今月1日を 0 とした場合の「109日後」を設定します。
今月1日が「2019年10月1日」なので、その「109日後」である「2020年1月17日」になる、という仕組みです。