GASで日付をそのままセルやログに出すと、Sat Feb 11 2026 00:00:00 GMT+0900 のような読みにくい文字列になってしまいます。これを「2026/02/11」や「2月11日(水)」のように好きな形に変換するのが Utilities.formatDate です。この記事では、コピペで動くコード例とつまずきポイントを、初めての方にも分かるように一気に解説します。
この記事のポイント
Utilities.formatDate(日付, タイムゾーン, フォーマット)の3つを渡すだけで、日付を好きな文字列にできる- 日本時間にするにはタイムゾーンに
"Asia/Tokyo"を指定(ここを忘れると9時間ズレる)- 曜日を日本語で出すときは
EEEではなく配列を使うのが確実- ファイル名・日報・通知メッセージなど、実務の「日付の自動整形」がこれ一行で片づく
Utilities.formatDateとは?まずは結論から
Utilities.formatDate は、日付を指定したフォーマットの文字列に変換するGAS標準の関数です。基本形はこれだけです。
function basicFormat() {
// 今の日付を「2026/02/11」の形にする
const formatted = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy/MM/dd");
Logger.log(formatted); // 例: 2026/02/11
}
渡すものは3つです。
- 日付:変換したい
Dateオブジェクト(new Date()で「今」になります) - タイムゾーン:
"Asia/Tokyo"を入れると日本時間になります - フォーマット:
"yyyy/MM/dd"のように、出したい形を記号で指定します
まずはこの形を覚えれば、あとは3つ目のフォーマットを変えるだけで自由自在です。
3つの引数を1つずつ理解する
Utilities.formatDate でつまずく原因は、ほぼこの3つの引数の理解不足です。順番に見ていきます。
1. 日付(Dateオブジェクト)
変換のもとになる日付です。「今」を使うなら new Date()、特定の日付を使うなら new Date(2026, 1, 11) のように書きます。
注意:new Date() の月は 0始まり(1月が0、2月が1)です。これはGAS(JavaScript)共通のクセで、ここでよく事故ります。月まわりの落とし穴は、こちらで詳しくまとめています。
関連記事:GASの日付操作 完全ガイド(Dateの罠とよく使うパターン)
2. タイムゾーン
「どの地域の時刻として出すか」の指定です。日本で使うなら、ほぼ "Asia/Tokyo" で固定でOKです。
注意:一番多いミスがここです。タイムゾーンを "UTC" にしたり、間違った値を入れると、表示が9時間ズレます。
function timezoneCheck() {
const now = new Date();
// NG: UTC(世界標準時)だと9時間前の時刻になる
Logger.log(Utilities.formatDate(now, "UTC", "yyyy/MM/dd HH:mm"));
// OK: 日本時間(こちらが正解)
Logger.log(Utilities.formatDate(now, "Asia/Tokyo", "yyyy/MM/dd HH:mm"));
}
「日付は合っているのに時間だけ変」「日付が1日前になる」ときは、まずここを疑ってください。
3. フォーマット(出したい形)
yyyy や MM といった記号を組み合わせて、出力の形を決めます。記号はそのまま数字に置き換わり、/ や : や日本語はそのまま文字として出ます。
よく使うフォーマット記号一覧
覚えるのはこれだけで十分です。大文字・小文字で意味が変わる点に注意してください(例:MM=月、mm=分)。
| 記号 | 意味 | 出力例 |
|---|---|---|
yyyy |
西暦4桁 | 2026 |
yy |
西暦2桁 | 26 |
MM |
月(2桁) | 02 |
M |
月 | 2 |
dd |
日(2桁) | 11 |
d |
日 | 11 |
HH |
時(24時間) | 09 / 21 |
hh |
時(12時間) | 09 |
mm |
分 | 05 |
ss |
秒 | 30 |
EEE |
曜日(英語) | Wed |
注意:MM(月)と mm(分)はよく取り違えます。「分」は小文字、と覚えてください。
コピペで動く実例3パターン
そのまま貼り付けて実行できます。エディタに貼って実行 → 実行ログ(Ctrl + Enter)で結果を確認してください。
例1:基本の年月日を出す
function example1() {
const today = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy/MM/dd");
Logger.log(today); // 例: 2026/02/11
}
例2:時刻つきで日時をまとめて出す
function example2() {
const datetime = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy/MM/dd HH:mm:ss");
Logger.log(datetime); // 例: 2026/02/11 21:05:30
}
通知メッセージやログに「いつ実行したか」を残したいときの定番です。
例3:曜日つき・日本語で出す
EEE は曜日を出せますが、環境によって 英語(Wed)になることがあります。日本語の曜日を確実に出すなら、配列を使うのが鉄板です。
function example3() {
const now = new Date();
const week = ["日", "月", "火", "水", "木", "金", "土"];
// getDay() は 0=日曜 〜 6=土曜
const youbi = week[now.getDay()];
const result = Utilities.formatDate(now, "Asia/Tokyo", "M月d日") + "(" + youbi + ")";
Logger.log(result); // 例: 2月11日(水)
}
このパターンを覚えておくと、日本語の日付表記で困らなくなります。
実務での使いどころ
私自身、毎日の日報ファイルを 日報_20260211 のように日付つきの名前で自動生成していますが、これも formatDate 一行で実現できます。
セルに書き込む
function writeToSheet() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const stamp = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy/MM/dd HH:mm");
sheet.getRange("A1").setValue(stamp); // A1に「2026/02/11 21:05」が入る
}
ファイル名に日付を付ける
function makeDatedName() {
const ymd = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyyMMdd");
const fileName = "日報_" + ymd; // 例: 日報_20260211
Logger.log(fileName);
}
「請求書PDFを日付つきで保存」「シートに処理日時を記録」など、業務自動化ではほぼ毎回登場する書き方です。
よくあるつまずきと直し方
時間が9時間ズレる → タイムゾーンを "Asia/Tokyo" にしているか確認("UTC" になっていませんか?)。
「パラメータが合いません」というエラー → 第1引数が Date オブジェクトになっていない可能性大。文字列や数値ではなく new Date() などを渡してください。
月が「2」ではなく「02」で出る/その逆 → MM(2桁)と M(1桁)の違いです。記号を変えれば直ります。
曜日が英語で出る → 上の「例3」の配列パターンに切り替えてください。
ヒント:困ったら、まず
Logger.log()で出力を確認するのが最短です。
この記事のポイント(まとめ)
| ポイント | 説明 |
|---|---|
| 基本形 | Utilities.formatDate(日付, "Asia/Tokyo", "yyyy/MM/dd") |
| 日本時間 | タイムゾーンは "Asia/Tokyo"。忘れると9時間ズレる |
| 月と分 | MM=月、mm=分。取り違えに注意 |
| 日本語の曜日 | EEE ではなく配列 ["日","月",…][getDay()] が確実 |
| 実務 | ファイル名・記録日時・通知メッセージの自動整形に必須 |
次のステップ
日付を「文字列」にできたら、次は取得・書き込みや日付の計算に進むと、できることが一気に広がります。
- GASの日付操作 完全ガイド(Dateの罠・営業日計算・期限チェック)
- GASの配列操作|map/filter/reduceの使い方
- GASの正規表現で文字列を処理する方法
- GASのセル読み書き|getRange/getValue/setValueの基本
まずは「例1」をそのままコピーして動かしてみてください。出力が確認できれば、あとはフォーマットを変えるだけで、日付を自由に整形できます。
コメント