【GAS】日付の取得・演算(Date オブジェクト)
Google Apps Script(GAS)で日付(Dateオブジェクト)を扱う方法をご紹介します。
GAS日付を扱うDate オブジェクトの基本構文
GASではDateオブジェクトで日付や時間を扱います。生成方法や扱い方は複数あるので場面によって使い分けてみてください。
今日・今の日付と時刻を取得
new Date()
// //今日(実行時点で2022年8月17日14時18分32秒)の日付を取得
let date = new Date();
console.log(date); // Wed Aug 17 2022 14:18:32 GMT+0900 (Japan Standard Time)
日付と時刻を指定して取得
new Date(year, month, date [, hour, minute, second, msecond])
//「2019年10月12日9時36分55秒)の日付を取得
let date = new Date(2019, 09, 12, 9, 36, 55);
console.log(date); // Wed Aug 17 2022 14:18:32 GMT+0900 (Japan Standard Time)
指定の日時でDateオブジェクトを生成する場合は年・月・日・時・分・秒をそれぞれ引数として与えます。引数を与える場合は日付は必須、時間以降は任意です。月は<1~12>ではなく<0~11>で与えなければならないので注意が必要です。
new Date(date)
- date:日付の文字列(例:「2022/8/17 12:13:59:21」(通常形式)、「Aug 17 2022 12:13:59:21」(英文形式))
//「2019年10月12日9時36分55秒)の日付を取得
let date = new Date('2019/10/12 09:36:55');
console.log(date); // Sat Oct 12 2019 09:36:55 GMT+0900 (Japan Standard Time)
let date = new Date('Oct 12 2019 09:36:55');
console.log(date); // Sat Oct 12 2019 09:36:55 GMT+0900 (Japan Standard Time)
日付を数字で取得する
getFullYear:「年」(4桁)を取得
let d = new Date('2019/10/12 09:36:55');
console.logd.getFullYear(); //2019
getMonth:「月」(0~11)を取得
let d = new Date('2019/10/12 09:36:55');
console.log(d.getMonth()); //9
getDate:「日」(1~31)を取得
let d = new Date('2019/10/12 09:36:55');
console.log(d.getDate()); // 12
getDay:「曜日」(0→日曜日 ~ 6→土曜日)を取得
let d = new Date('2019/10/12 09:36:55');
console.log(d.getDay()); //6(土曜日)
getMinutes:「分」(0~59)を取得
let d = new Date('2019/10/12 09:36:55');
console.log(d.getMinutes()); //36
getSeconds:「秒」(0~59)を取得
let d = new Date('2019/10/12 09:36:55');
console.log(d.getSeconds()); //55
getTime:1970年1月1日00:00:00からの経過ミリ秒を取得
let d = new Date('2019/10/12 09:36:55');
console.log(d.getTime()); //1570840615000
getTimezoneOffset:協定世界時(UTC)との差を取得
let d = new Date('2019/10/12 09:36:55');
console.log(d.getTimezoneOffset()); //-540
日本は「+0900(JST)」と表されますが、「getTimezoneOffset」は現地時刻から見た協定世界時なのでマイナスになってます。
日付を文字列で取得する(文字列に変換する)
toString:日時を文字列で取得
let d = new Date('2019/10/12 09:36:55');
console.log(d); //Sat Oct 12 2019 09:36:55 GMT+0900 (Japan Standard Time)
console.log(Object.prototype.toString.call(d)); //[object Date]
console.log(d.toString()); //Sat Oct 12 2019 09:36:55 GMT+0900 (Japan Standard Time)
console.log(Object.prototype.toString.call(d.toString())); // [object String]
toDateString:日付を文字列で取得
console.log(d.toDateString()); //Sat Oct 12 2019
toTimeString:時刻を文字列で取得
console.log(d.toTimeString()); //09:36:55 GMT+0900 (Japan Standard Time)
toJSON:日時をJSON文字列で取得
console.log(d.toJSON()); // 2019-10-12T00:36:55.000Z
日付を設定する
日付の変更メソッドが用意されています。曜日はその他の日付で決まる変数なので曜日のメソッドはありません。
setFullYear:「年」(4桁)を設定
let d = new Date('2019/10/12 09:36:55');
console.log(Utilities.formatDate(d, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss')); // 2019/10/12 09:36:55
d.setFullYear(2005);
console.log(Utilities.formatDate(d, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss')); // 2005/10/12 09:36:55
setMonth:「月」(0~11)を設定
console.log(Utilities.formatDate(d, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss')); // 2019/10/12 09:36:55
d.setMonth(03); //「03」は4月
console.log(Utilities.formatDate(d, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss')); // 2019/04/12 09:36:55
getDate:「日」(1~31)を設定
console.log(Utilities.formatDate(d, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss')); // 2019/10/12 09:36:55
d.setDate(19);
console.log(Utilities.formatDate(d, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss')); // 2019/10/19 09:36:55
setMinutes:「分」(0~59)を設定
console.log(Utilities.formatDate(d, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss')); // 2019/10/12 09:36:55
d.setMonth(03);
console.log(Utilities.formatDate(d, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss')); // 2019/04/12 09:36:55
setSeconds:「秒」(0~59)を設定
console.log(Utilities.formatDate(d, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss')); // 2019/10/12 09:36:55
d.setSeconds(50);
console.log(Utilities.formatDate(d, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss')); // 2019/10/12 09:36:50
yyyy/mm/ddの形式で取得する
Utilities.formatDate(date, timeZone, format)
- date(必須):Dateオブジェクト
- timeZone(必須):タイムゾーン(日本時間であれば「’JST’」(Japan Standard Time)を指定)
- format(必須):表示させたいフォーマット形式(SimpleDateFormat 仕様に基づく形式)
下記はフォーマット一例です。
フォーマット | 表示 | 【2019/10/12 09:36:55 (JST)】の場合 |
---|---|---|
yyyy | 年(西暦4桁) | 2019 |
MM | 月(数字2桁) | 10 |
dd | 日(数字2桁) | 12 |
E | 曜日(短縮英語) | Sat |
HH | 時(0時~23時表記、数字2桁) | 09 |
mm | 分(数字2桁) | 36 |
これのフォーマット定義を利用して下記のように変換できます。
let today = new Date();
console.log(Utilities.formatDate(today, 'JST', 'yyyy-MM-dd')); //2022/08/19
日付の演算
日付演算用のメソッドは用意されていない
前提として、Dateオブジェクトを演算用のメソッドは用意されておらず、Dateオブジェクトを数値をして取得してから計算する必要があります。例えば、昨日の日付を取得するコードは下記のように表現できます。
//現在時刻を取得
let today = new Date();
//現在時刻と別参照で同じ時刻のDateオブジェクトを作成
let yesterday = new Date(today);
//日付を昨日に設定
yesterday.setDate(today.getDate()-1);
//日付の出力
console.log(Utilities.formatDate(today, 'Asia/Tokyo', 'yyyy/MM/dd')); //2022/08/19
console.log(Utilities.formatDate(yesterday, 'Asia/Tokyo', 'yyyy/MM/dd')); //2022/08/18
演算の基本
例えば、日を1日だけ加算したければ「getDateメソッドで数値を取得して+1」、月を1か月加算したければ「getMonthメソッドで数値を取得して+1」といった形で演算子、演算後の要素を引数としてsetDateメソッドを適応することで新たな日時が取得できます。
「明日」を取得
let d_d1 = new Date(d);
d_d1.setDate(d.getDate() + 1);
console.log(Utilities.formatDate(d_d1, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm')); //2022/08/23 21:00
「1か月後」を取得
let d_m1 = new Date(d);
d_m1.setMonth(d.getMonth() + 1);
console.log(Utilities.formatDate(d_m1, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm')); // 2022/09/22 21:00
その他、いろいろな日付の取得方法は下記で解説しています。
日付を比較する
比較用のメソッドはなく比較記号を使う
DateクラスにはJavaのbeforeメソッド/afterメソッド/comaperToメソッドのような比較用のメソッドは存在しないため、Date型の変数同士を比較するには比較記号を使います。
let today = new Date('2022/08/23');
console.log(today);//Tue Aug 23 2022 00:00:00 GMT+0900 (Japan Standard Time)
let yesterday = new Date('2022/08/22');
console.log(yesterday); //Mon Aug 22 2022 00:00:00 GMT+0900 (Japan Standard Time)
console.log(today < yesterday); //false
console.log(today > yesterday); //true
まとめ
Dateオブジェクトの基本的な使い方について解説を行いました。