【GAS】日付の操作まとめ 月末・日跨ぎ・文字列変換【Dateオブジェクト】

Google Apps Script

今回は、Google Apps Scriptで日付を表すDateオブジェクトの様々な操作方法について解説します。

Dateオブジェクトの使い方

現在日付を取得

var day = new Date(); // Tue Jul 25 2023 16:09:45

文字列で日付を設定

var day = new Date('1999/11/03');   // Wed Nov 03 1999 00:00:00

上記の例では年・月・日を指定しており、それ以降の部分は全て0になっています。指定することも可能です。

数値で日付を指定

var day = new Date(1999, 10, 3);  // Wed Nov 03 1999 00:00:00

数値を引数にする場合、月は0始まりになります。

Dateオブジェクトから文字列へ変換

そのまま変換

var day = new Date();        // Tue Jul 25 2023 16:09:45

console.log(day.toString()); // "Tue Jul 25 2023 16:09:45 GMT+0900 (Japan Standard Time)"

フォーマットを指定して変換

var day = new Date(); // Tue Jul 25 2023 16:09:45

// 実行結果:1999/11/03
let dayStr = Utilities.formatString("%04d/%02d/%02d", 1999, 11, 3);

フォーマットを指定しての変換は、GASのUtilitiesクラスのformatStringメソッドを使います。C言語のsprintfのように使います。(フォーマットの詳細:https://ja.wikipedia.org/wiki/Printf

参考:Apps Script>Class Utilities

日付の取得

年を取得:getFullYear

var day = new Date();          // Tue Jul 25 2023 16:09:45
console.log(day.getFullYear()) // 2023

月を取得:getMonth

var day = new Date();        // Tue Jul 25 2023 16:09:45
console.log(day.getMonth())  // 6 ※

getMonthで取得した月の値は、0を基点とした数値です。

日を取得:getDate

var day = new Date();       // Tue Jul 25 2023 16:09:45
console.log(day.getDate())  // 25

n日後、nヶ月後、n年後の日付を取得

n年後の日付を取得

var day = new Date();                   // Tue Jul 25 2023 16:09:45
day.setFullYear(day.getFullYear() + 1);  // Thu Jul 25 2024 16:09:45 (1年後)

nヶ月後の日付を取得

var day = new Date();             // Tue Jul 25 2023 16:09:45
day.setMonth(day.getMonth() + 1);  // Fri Aug 25 2023 16:09:45 (1ヶ月後)

n日後の日付を取得

var day = new Date();           // Tue Jul 25 2023 16:09:45
day.setDate(day.getDate() + 5);  // Sun Jul 30 2023 16:09:45 (5日後)

月初・月末を取得

月初の日付を取得

var day = new Date();     // Tue Jul 25 2023 16:09:45
day.setDate(1);           // Sat Jul 01 2023 16:09:45

月末の日付を取得

var day = new Date();               // Tue Jul 25 2023 16:09:45
day.setMonth(day.getMonth() + 1, 0); // Mon Jul 31 2023 16:09:45

setMonthメソッドでは、範囲外の値が渡されたときに自動で調整します。

上記の例では、月に1か月後を指定、日付に0を指定しています。日付は1~31が正常な範囲で、0の場合は1日のひとつ前、つまり先月の最終日に設定されます。この調整機能を利用して月末を取得しています。

Dateオブジェクトのループ

たとえば、以下のような日付のプルダウンを生成する際にループ処理を使います。

1ヶ月分ループ

let array = [];
// 当月の末日を取得
var endMonth = new Date(day.getFullYear(), day.getMonth() + 1, 0);

// 配列に当月日付を順に追加
for (let i = 0; i <= endMonth.getDate(); i++) {

    // Dateを文字列に変換
    let dayStr = Utilities.formatString("%04d/%02d/%02d", day.getFullYear(), day.getMonth() + 1, i +1);

    // 配列に選択肢を追加
    choices.push(day);
}

0はじまり、月末までループします。

本日+1ヶ月分ループ(月またぎが発生する場合)

let array = [];
// 当月の末日を取得
var endMonth = new Date(day.getFullYear(), day.getMonth() + 1, 0);
// 現在日付 +1ヶ月を取得
var nextMonth = new Date(day.getFullYear(), day.getMonth() + 1, day.getDate());

// 配列に当月日付を順に追加
for (let i = day.getDate(); i <= endMonth.getDate(); i++) {
    // Dateを文字列に変換
    let dayStr = Utilities.formatString("%04d/%02d/%02d", day.getFullYear(), day.getMonth() + 1, i);

    // 配列に選択肢を追加
    choices.push(dayStr);
}

// 配列に来月日付を順に追加
for (let i = 0; i < nextMonth.getDate(); i++) {
    // Dateを文字列に変換
    let dayStr = Utilities.formatString("%04d/%02d/%02d", nextMonth.getFullYear(), nextMonth.getMonth() + 1, i + 1);

    // 配列に選択肢を追加
    choices.push(dayStr);
}

本日日付が2023/07/25とすると、1ヶ月分ループさせる場合8/25までになります。この場合、

  • 当月の月末日:2023/07/31
  • 現在日付+1ヶ月:2023/08/25

をそれぞれ取得しておき、7/1~7/31まで・8/1~8/25までのループに分けます。

まとめ

今回は、Google Apps Script(GAS)でDateオブジェクトを操作する方法について解説しました。日付の操作はややこしい部分もありますが、使えるようになると様々な場面で役立つと思います。

記事を書くにあたり、JavaScriptのドキュメントを参考にしました。GASはJavaScriptをベースに作られたプログラミング言語であり、DateオブジェクトもGASに組み込まれています。以下にドキュメントのリンクを載せておきますので、日付の操作をする際に参考にしてみてください。

Date – JavaScript – MDN Web Docs – Mozilla

¥2,860 (2024/10/03 10:14時点 | Amazon調べ)
chaso

文系出身、数字が苦手な平凡主婦。塾講師、大手企業SE、不動産事務、Webライター、結婚後はパートタイムでエンジニアをしています。機械音痴だけど効率化や自動化をこよなく愛しています!お仕事の依頼・ご相談は問い合わせよりお願いいたします♪

chasoをフォローする

コメント

タイトルとURLをコピーしました