ADVERTISEMENT

【Googleスプレッドシート】Apps ScriptでDateオブジェクトを操作する!日付演算と書式整形

【Googleスプレッドシート】Apps ScriptでDateオブジェクトを操作する!日付演算と書式整形
🛡️ 超解決

Googleスプレッドシートで日付を扱う際、複雑な計算や特定の書式への変換が必要になることがあります。シートの関数だけでは限界を感じる場面もあるでしょう。そのような場合、Apps ScriptのDateオブジェクトを活用すれば、自由自在に日付を操作できます。この記事では、Dateオブジェクトの作成方法から日付の加減算、書式整形までの手順を詳しく解説します。

【要点】Apps ScriptでDateオブジェクトを操作する3つのポイント

  • new Date() による日付の作成: 現在日時や任意の日時を正確に取得できます。引数に年・月・日などを指定することで、目的の日付を作り出せます。
  • getDate() / setDate() による日付演算: 日数の加減算や月末日への調整が可能です。月をまたぐ場合も自動的に処理されます。
  • Utilities.formatDate による書式整形: 日付を「yyyy/MM/dd」や「yyyy年MM月dd日」などの任意の文字列に変換できます。タイムゾーンも指定できます。

ADVERTISEMENT

Apps ScriptにおけるDateオブジェクトの基礎

Apps ScriptのDateオブジェクトは、JavaScriptのDateオブジェクトと同じ機能を持っています。新しい日付を作成するには new Date() を使用します。引数なしで呼び出すと現在の日時が取得され、引数として年、月(0〜11)、日、時、分、秒を指定すると特定の日時を設定できます。また、getFullYear()getMonth()getDate() などのメソッドで日付の各部分を取得でき、setFullYear()setDate() などで値を変更できます。日付の演算では、ミリ秒単位のタイムスタンプを扱う getTime()setTime() も重要です。これらのメソッドを組み合わせることで、スプレッドシート上では難しい高度な日付操作が可能になります。

日付演算と書式整形の具体的な手順

新しいDateオブジェクトを作成する方法

  1. 現在の日時を取得する
    スクリプトエディタで var now = new Date(); と記述します。これで現在の日時が変数 now に格納されます。
  2. 特定の日付を作成する
    var specificDate = new Date(2025, 0, 15); のように記述します。注意点として、月は0から始まるため、1月は0、2月は1となります。この例では2025年1月15日を表します。
  3. 文字列から日付を作成する
    var dateFromString = new Date('2025-01-15T10:30:00'); のようにISO形式の文字列も使用できます。ただし、ブラウザや環境によって解釈が異なる場合があるため、推奨される方法ではありません。

日付に日数や月数を加算する方法

  1. 日数を加算する
    var date = new Date();
    date.setDate(date.getDate() + 7);
    と記述します。これで現在日時に7日を加算できます。月末を超える場合も自動的に翌月へ繰り越されます。
  2. 月数を加算する
    date.setMonth(date.getMonth() + 3); と記述します。ただし、加算後の日付が存在しない日(例:1月31日に1ヶ月加算→2月31日がない)の場合は、自動的に月末日に調整されます。注意が必要です。
  3. 年の加算
    date.setFullYear(date.getFullYear() + 1); で1年後の日付を取得できます。

日付の差分を計算する方法

  1. 2つの日付の差をミリ秒で取得する
    var diffMs = date2.getTime() - date1.getTime(); と記述します。結果はミリ秒単位で返ってきます。
  2. ミリ秒を日に変換する
    var diffDays = diffMs / (1000 * 60 * 60 * 24); で日数に換算できます。小数点以下は切り捨てたい場合は Math.floor() を使用します。
  3. 営業日数を計算する(応用)
    土日を除外する場合は、ループで曜日を確認しながらカウントします。Apps Scriptの getDay() メソッドで曜日(0=日曜、6=土曜)を取得できます。

日付を任意の書式で整形する方法

  1. Utilities.formatDate の基本的な使い方
    var formatted = Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy/MM/dd'); と記述します。第1引数にDateオブジェクト、第2引数にタイムゾーン、第3引数に書式パターンを指定します。
  2. よく使う書式パターン
    「yyyy/MM/dd」は「2025/01/15」、「yyyy年MM月dd日」は「2025年01月15日」、「yyyy-MM-dd HH:mm:ss」は「2025-01-15 10:30:00」となります。パターンはJavaのSimpleDateFormatに準拠しています。
  3. タイムゾーンを指定する重要性
    スクリプトの実行環境のタイムゾーンと異なる場合、意図しない時刻になることがあります。特に日本時間で表示したい場合は ‘Asia/Tokyo’ を明示的に指定しましょう。

日付操作でよく起きる問題と対処法

月の加算で間違った日付になる

例えば1月31日に1ヶ月加算すると、2月31日は存在しないため、自動的に3月3日(2月の末日である28日からの差分)になります。これを避けるには、加算前に日付を1日などに固定する方法があります。date.setDate(1); で月初めにリセットしてから setMonth を行うと、意図した月の1日を取得できます。

タイムゾーンの違いによる表示ズレ

スクリプトエディタのタイムゾーン設定とシートのタイムゾーンが異なる場合、Utilities.formatDate で明示的にタイムゾーンを指定しないと、時刻がずれて表示されます。例えば日本時間で正しく表示したい場合は、必ず第2引数に ‘Asia/Tokyo’ を設定してください。

日付の比較で意図しない結果になる

Dateオブジェクト同士を「==」で比較しても、参照が異なるため正しく判定できません。比較するには getTime() でミリ秒に変換して数値として比較するか、valueOf() メソッドを使用します。例:date1.getTime() === date2.getTime() で同一日時かどうかを判定できます。

ADVERTISEMENT

日付操作の各手法の比較

手法 用途 注意点
new Date() 現在日時や特定日時の作成 月は0始まり、文字列パースは環境依存
setDate / getDate 日数の加減算 自動で月跨ぎ処理、月末調整に注意
setMonth / getMonth 月数の加減算 存在しない日付は自動調整される
getTime / setTime 差分計算や比較 ミリ秒単位、数値として比較可能
Utilities.formatDate 日付の文字列整形 タイムゾーンの指定が必須、書式はJava準拠

まとめ

この記事では、Apps ScriptのDateオブジェクトを使った日付の作成、演算、書式整形の方法を解説しました。これらのテクニックをマスターすれば、スプレッドシートだけでは実現が難しい複雑な日付処理をスクリプトで自動化できます。例えば、スクリプトからシートに日付を書き込む際に Utilities.formatDate を利用して任意の書式に変換してからセットすると便利です。また、setMonth の挙動を理解して月末日を正しく扱えるようになりましょう。次のステップとして、トリガーと組み合わせて定期的な日付処理を自動化する方法にも挑戦してみてください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。