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オブジェクトを作成する方法
- 現在の日時を取得する
スクリプトエディタでvar now = new Date();と記述します。これで現在の日時が変数nowに格納されます。 - 特定の日付を作成する
var specificDate = new Date(2025, 0, 15);のように記述します。注意点として、月は0から始まるため、1月は0、2月は1となります。この例では2025年1月15日を表します。 - 文字列から日付を作成する
var dateFromString = new Date('2025-01-15T10:30:00');のようにISO形式の文字列も使用できます。ただし、ブラウザや環境によって解釈が異なる場合があるため、推奨される方法ではありません。
日付に日数や月数を加算する方法
- 日数を加算する
var date = new Date();と記述します。これで現在日時に7日を加算できます。月末を超える場合も自動的に翌月へ繰り越されます。
date.setDate(date.getDate() + 7); - 月数を加算する
date.setMonth(date.getMonth() + 3);と記述します。ただし、加算後の日付が存在しない日(例:1月31日に1ヶ月加算→2月31日がない)の場合は、自動的に月末日に調整されます。注意が必要です。 - 年の加算
date.setFullYear(date.getFullYear() + 1);で1年後の日付を取得できます。
日付の差分を計算する方法
- 2つの日付の差をミリ秒で取得する
var diffMs = date2.getTime() - date1.getTime();と記述します。結果はミリ秒単位で返ってきます。 - ミリ秒を日に変換する
var diffDays = diffMs / (1000 * 60 * 60 * 24);で日数に換算できます。小数点以下は切り捨てたい場合はMath.floor()を使用します。 - 営業日数を計算する(応用)
土日を除外する場合は、ループで曜日を確認しながらカウントします。Apps ScriptのgetDay()メソッドで曜日(0=日曜、6=土曜)を取得できます。
日付を任意の書式で整形する方法
- Utilities.formatDate の基本的な使い方
var formatted = Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy/MM/dd');と記述します。第1引数にDateオブジェクト、第2引数にタイムゾーン、第3引数に書式パターンを指定します。 - よく使う書式パターン
「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に準拠しています。 - タイムゾーンを指定する重要性
スクリプトの実行環境のタイムゾーンと異なる場合、意図しない時刻になることがあります。特に日本時間で表示したい場合は ‘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
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
