GASのUtilities.formatDateで
日付を思い通りに整形する方法
GASで日付を扱うとSat Jul 18 2026...のような読みにくい形になりがちです。Utilities.formatDate(日付を書式付き文字列に変換するGAS標準関数)で、「yyyy/MM/dd」やファイル名向けの形に自由に整える方法を解説します。
Table of Contents
そのままのDateが読みにくい理由
GASでnew Date()(現在日時を表すオブジェクト)をそのままログやセルに入れると、Sat Jul 18 2026 09:30:00 GMT+0900のような英語の長い文字列になります。人が読みにくいうえ、ファイル名やCSVには使いづらい形です。
そこで使うのがUtilities.formatDateです。日付・タイムゾーン・書式の3つを渡すだけで、狙った形の文字列に変換できます。
function showRawDate() {
const now = new Date();
// そのまま出すと読みづらく、環境で表示も変わる
Logger.log(now); // 例: Sat Jul 18 2026 09:30:00 GMT+0900 (JST)
// formatDate なら好きな形の文字列にできる
const text = Utilities.formatDate(now, "Asia/Tokyo", "yyyy/MM/dd HH:mm:ss");
Logger.log(text); // 例: 2026/07/18 09:30:00
}formatDateの基本の使い方
呼び出し方はUtilities.formatDate(日付, タイムゾーン, 書式)の3引数です。書式の文字列を変えるだけで、同じ日付をさまざまな形に整えられます。
function formatBasics() {
const date = new Date(2026, 6, 18, 9, 5, 3); // 2026年7月18日 09:05:03(月は0始まり)
const tz = "Asia/Tokyo";
Logger.log(Utilities.formatDate(date, tz, "yyyy/MM/dd")); // 2026/07/18
Logger.log(Utilities.formatDate(date, tz, "yyyy年MM月dd日")); // 2026年07月18日
Logger.log(Utilities.formatDate(date, tz, "HH:mm:ss")); // 09:05:03
Logger.log(Utilities.formatDate(date, tz, "yyyyMMdd_HHmmss")); // 20260718_090503
Logger.log(Utilities.formatDate(date, tz, "yyyy/MM/dd HH:mm")); // 2026/07/18 09:05
}※new Date(2026, 6, 18)の月は0始まりのため、6は7月を指します。ここが日付処理でつまずきやすいポイントです。
覚えておきたい書式パターン
書式の記号は大文字・小文字で意味が変わります。特にMM(月)とmm(分)の取り違えは頻出のミスです。まずはyyyy/MM/dd HH:mm:ssを基準に覚えておくと迷いません。
// よく使う書式パターン(大文字・小文字に注意)
// yyyy … 西暦4桁 (2026)
// yy … 西暦2桁 (26)
// MM … 月2桁 (07) ← 大文字は「月」
// dd … 日2桁 (18)
// HH … 時 24h (09)
// hh … 時 12h (09)
// mm … 分2桁 (05) ← 小文字は「分」
// ss … 秒2桁 (03)
// EEE … 曜日英語 (Sat)
// a … 午前/午後 (AM/PM)
function patternSample() {
const date = new Date();
const tz = "Asia/Tokyo";
Logger.log(Utilities.formatDate(date, tz, "yyyy-MM-dd (EEE) a hh:mm"));
// 例: 2026-07-18 (Sat) AM 09:30
}曜日を日本語で表示する
書式のEEEは英語の曜日(Sat など)になります。日本語の「土」にしたい場合は、getDay()(曜日番号を返す。日曜=0〜土曜=6)と配列を組み合わせて自前で置き換えるのが確実です。
const WEEKDAYS_JP = ["日", "月", "火", "水", "木", "金", "土"];
function formatWithJapaneseWeekday(date) {
const tz = "Asia/Tokyo";
const ymd = Utilities.formatDate(date, tz, "yyyy年MM月dd日");
const w = WEEKDAYS_JP[date.getDay()]; // getDay(): 日=0 〜 土=6
return ymd + "(" + w + ")"; // 例: 2026年07月18日(土)
}
function testWeekday() {
Logger.log(formatWithJapaneseWeekday(new Date(2026, 6, 18)));
}9時間ずれる原因とタイムゾーン指定
「日付が前日になる」「時刻が9時間ずれる」というトラブルの多くは、タイムゾーンの指定ミスが原因です。第2引数をUTC(協定世界時)にすると日本時間より9時間前の値で整形されます。日本時間で表示したいなら必ずAsia/Tokyoを指定してください。
function timezoneMatters() {
const date = new Date(2026, 6, 18, 1, 0, 0); // 7/18 01:00(日本時間)
// UTC で整形すると9時間前になり、日付が前日にずれる
Logger.log(Utilities.formatDate(date, "UTC", "yyyy/MM/dd HH:mm"));
// 2026/07/17 16:00
// Asia/Tokyo を指定すれば日本時間のまま
Logger.log(Utilities.formatDate(date, "Asia/Tokyo", "yyyy/MM/dd HH:mm"));
// 2026/07/18 01:00
// スクリプトの設定タイムゾーンを確認したいとき
Logger.log(Session.getScriptTimeZone()); // 例: Asia/Tokyo
}スプレッドシートの日付列を一括整形
シートのA列に入った日付を、曜日つきの表示に整えてB列へ書き出す例です。getValues()で一括取得し、setValues()でまとめて書き戻すことで、1セルずつ処理するより高速に動きます。
function formatDateColumn() {
const sheet = SpreadsheetApp.getActive().getSheetByName("予定");
const lastRow = sheet.getLastRow();
if (lastRow < 2) return;
// A列に入っている日付を一括取得(ヘッダー除く)
const dates = sheet.getRange(2, 1, lastRow - 1, 1).getValues();
const tz = "Asia/Tokyo";
const formatted = dates.map(([value]) => {
// 空セルや文字列はそのまま返す
if (!(value instanceof Date)) return [value];
return [Utilities.formatDate(value, tz, "yyyy/MM/dd(EEE)")];
});
// B列にまとめて書き戻す
sheet.getRange(2, 2, formatted.length, 1).setValues(formatted);
}※ セルの値が日付として認識されているかはvalue instanceof Dateで判定しています。文字列や空セルはそのまま残します。
ファイル名に日付を付けて保存する
日付整形の定番用途が、バックアップやレポートのファイル名です。yyyyMMdd_HHmmssのように記号を使わない形にすると、ファイル名としても安全で、時系列に並べやすくなります。
function backupWithDatedName() {
const source = SpreadsheetApp.getActive();
const stamp = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyyMMdd_HHmmss");
const name = source.getName() + "_backup_" + stamp;
// 例: 売上管理_backup_20260718_093000
DriveApp.getFileById(source.getId()).makeCopy(name);
Logger.log("バックアップ作成: " + name);
}まとめ
GASの日付整形はUtilities.formatDateだけで大半をこなせます。書式記号の大文字・小文字の意味を押さえ、タイムゾーンにAsia/Tokyoを必ず指定すれば、9時間ずれの不具合も防げます。曜日の日本語化やシートの一括整形、ファイル名への日付付与まで、実務でそのまま使えるパターンを組み合わせて活用してください。
よくある質問
GASに標準で用意されている、日付(Dateオブジェクト)を指定した書式の文字列に変換する関数です。Utilities.formatDate(日付, タイムゾーン, 書式)の3つの引数を渡すと、「yyyy/MM/dd」のような好きなフォーマットの文字列を返します。ライブラリの追加は不要で、そのまま使えます。
第2引数のタイムゾーンを省略したりUTC(協定世界時)にしていると、日本時間より9時間前の値で整形されてしまうためです。日本時間で表示したい場合は必ず"Asia/Tokyo"を指定してください。深夜0時台の日付が前日になってしまう不具合の多くはこれが原因です。
書式にEEEを含めると英語の曜日(Fri など)が入ります。日本語の「金」などにしたい場合は、formatDateでEEEを取り出してから、["日","月","火","水","木","金","土"]の配列を使って自前で置き換えるのが確実です。getDay()で曜日番号を取得して配列から引く方法もよく使われます。
できます。getValues()で日付列を一括取得し、各セルをUtilities.formatDateで文字列に変換した二次元配列を作り、setValues()で別列に書き戻すのが定番です。1セルずつ処理するより高速で、GASの実行時間制限にも引っかかりにくくなります。
大文字のMMは「月」、小文字のmmは「分」を表します。大文字小文字を間違えると、月のつもりが分になってしまいます。同様にHHは24時間表記の時、hhは12時間表記の時、ddは日、yyyyは西暦4桁です。まず"yyyy/MM/dd HH:mm:ss"の形を覚えておくと迷いません。
GAS開発・業務Webシステムを
相談する。
日付整形以外にも、帳票の自動作成・スプレッドシート連携・Gmail通知など、日々の業務を自動化するGAS開発をご相談いただけます。