Make.comで日付を扱っていて、こんな経験はないでしょうか。
- 表示された日付が9時間ずれている
- 「Cannot format an empty string」というエラーで止まる
- 変換したはずなのに、元の形式のまま出てくる
どれも原因は共通していて、Makeが受け取ったデータを日付として認識していないことにあります。
日付は、住所の書き方に似ています。日本は都道府県から書き、欧米は番地から書く。同じ情報でも並び順が違うので、相手が期待する形で渡さないと届きません。
この記事では、その受け渡しをどう合わせるかを整理します。
まず、2つの関数の役割を分ける
ここを混同していると、いつまでも直りません。
| 関数 | 入力 | 出力 | 役割 |
|---|---|---|---|
| formatDate | 日付 | 文字列 | 見た目を整える |
| parseDate | 文字列 | 日付 | 日付だと教える |
乱暴にまとめると、formatDateは「出すとき」、parseDateは「受けるとき」です。
外部サービスから届くデータは、たいてい文字列です。人間の目には日付に見えても、Makeにとってはただの文字の並び。だから計算もできないし、形式の変換もできません。
この状態でformatDateを使おうとすると、意図しない結果になります。先にparseDateを通す必要がある。
formatDateの書き方
基本形はこうです。
{{formatDate(日付; “形式”)}}
引数の区切りはセミコロンです。カンマではありません。他所からコピーした式が動かない原因の多くがこれです。
よく使う形式
| 書き方 | 出力例 |
|---|---|
| YYYY-MM-DD | 2026-08-19 |
| YYYY年M月D日 | 2026年8月19日 |
| YYYY/MM/DD HH:mm | 2026/08/19 14:30 |
| YYYYMMDD_HHmmss | 20260819_143000 |
| M月D日(ddd) | 8月19日(水) |
注意点が1つ。MMは月、mmは分です。大文字と小文字で意味が変わります。時刻を入れたつもりが月が並んでいた、という事故はここから起きます。
ファイル名に使うなら4つ目の形式が便利です。数字だけなので、並べ替えたときに時系列順になります。
9時間ずれる問題
日付を扱っていて最も遭遇するトラブルです。
Makeが返す時刻は、組織のタイムゾーン設定を基準にします。ここが日本時間になっていないと、すべての日付が9時間ずれます。
確認する場所はプロフィール設定のタイムゾーン項目です。シナリオ用の設定をAsia/Tokyoにしてください。
式の中で指定する方法
formatDateには第3引数があり、そこでタイムゾーンを指定できます。
{{formatDate(1.date; “YYYY-MM-DD HH:mm”; “Asia/Tokyo”)}}
意外と知られていない機能ですが、これを覚えておくと便利な場面があります。組織全体の設定は変えずに、特定の処理だけ別のタイムゾーンで出力したいとき。海外の拠点向けの通知を作るときなどです。
ただし、基本は組織設定を正しくしておくべきです。式ごとに指定して回ると、直し漏れが必ず出ます。
parseDateの書き方
ここが最大のつまずきポイントです。
{{parseDate(“2026/08/19”; “YYYY/MM/DD”)}}
第2引数に書くのは、元の文字列がどういう形式かです。出力したい形式ではありません。
「2026/08/19という文字列は、年/月/日の並びですよ」とMakeに教えている。そう理解すると迷いません。
形式を変換する流れ
「2026/08/19」を「2026年8月19日」にしたい場合、2段構えになります。
{{formatDate(parseDate(1.date; “YYYY/MM/DD”); “YYYY年M月D日”)}}
内側で日付として解釈させて、外側で見た目を整える。日付変換の基本形はこの形です。
ISO 8601形式なら省略できる
外部サービスが返す日付の多くは、2026-08-19T14:30:00Zのような形式です。これはISO 8601という国際規格で、Makeはそのまま日付として認識します。
この形式ならparseDateは不要で、formatDateに直接渡せます。届いたデータがこの形をしているかどうか、まず実行ログで確認してください。
計算する
日数の足し引き
{{formatDate(addDays(now; 7); “YYYY-MM-DD”)}} → 1週間後
{{formatDate(addDays(now; -3); “YYYY-MM-DD”)}} → 3日前
マイナスを指定すれば過去になります。addMonths、addYears、addHoursも同じ書き方です。
月初と月末
請求書や月次レポートでよく必要になります。
月初:{{formatDate(setDate(now; 1); “YYYY-MM-DD”)}}
月末:{{formatDate(addDays(setDate(addMonths(now; 1); 1); -1); “YYYY-MM-DD”)}}
月末のほうは、翌月の1日を出してから1日引く、という考え方です。月によって末日が変わる問題を、この方法で回避できます。
式は長くなりますが、月末日を条件分岐で場合分けするよりは簡単です。
エラーへの対処
空の値でエラーになる
「Cannot format an empty string」は、空欄をformatDateに渡したときのエラーです。
ifemptyで囲えば済みそうに見えますが、これがうまくいかない場合があります。formatDateの評価が先に走ってしまうためです。
確実なのは、フィルターで空欄を弾いてから処理に入る構成にすること。または、if関数で条件分岐させて、空のときはformatDate自体を通さないようにします。
{{if(1.date = emptystring; “”; formatDate(1.date; “YYYY-MM-DD”))}}
変換されずに元のまま出る
parseDateの第2引数と、実際の文字列の形が合っていません。「2026-08-19」なのに「YYYY/MM/DD」と指定している、といったケースです。
区切り文字まで正確に合わせる必要があります。
連携先ごとの注意
| 連携先 | 求められる形式 |
|---|---|
| Googleカレンダー | ISO 8601(タイムゾーン付き) |
| Googleスプレッドシート | 文字列でも入るが、日付として扱わせるなら形式を揃える |
| Slack通知 | 人が読む形式でよい |
| 各種API | ドキュメントの指定に従う |
スプレッドシートは要注意です。見た目は日付でも、セルの書式が文字列だと後の集計で使えません。書き込み先のセル書式も合わせて確認してください。
気になるところ
Makeの日付処理について、使いにくいと感じる点も書いておきます。
まず、エラーメッセージが不親切です。「empty string」と言われても、どのモジュールのどの項目が空なのかは自分で追うしかありません。
もう1つ、入れ子が深くなると読めなくなること。月末を出す式を見て、3か月後の自分が意味を理解できるかというと、正直あやしい。長い式を書くときは、Set variableで一度受けて分解しておくと後で助かります。
私がこのブログの記事生成をMakeで回していた頃も、日付まわりは何度か作り直しました。動くまでは試行錯誤ですが、一度型ができれば使い回せる領域でもあります。
よくある質問
曜日を日本語で出せますか
dddで曜日が出ますが、言語設定によって表記が変わります。日本語で確実に出したいなら、曜日の数値を取得してif関数で振り分ける方法が確実です。
和暦は使えますか
標準の関数では対応していません。西暦から計算して文字列を組み立てる形になります。
日付の差分を計算できますか
dateDifference関数があります。2つの日付の間隔をミリ秒などで返すので、日数にするには変換が必要です。
営業日だけ数えられますか
標準関数だけでは難しいです。祝日の情報も必要になるので、シートに営業日カレンダーを持たせて参照する構成が現実的です。
タイムゾーンを変えるとクレジットは増えますか
増えません。関数はモジュール内の処理なので、追加の消費は発生しません。
まとめ
日付でつまずく原因は、ほぼ3つに絞られます。文字列を日付として渡していないこと、タイムゾーン設定が日本時間になっていないこと、そしてMMとmmを取り違えていること。
この3つを確認すれば、大半のずれは解決します。
※本リンクはアフィリエイトリンクです。
無料プランでも日付関数はすべて使えます。Set variableに書いて出力を見るところから → Make.com(※アフィリエイトリンクです)
詰まったときの調べ方を1つ渡すとすれば、まず実行ログで実際の値を見ることです。頭の中で式を追うより、何が入っているかを目で確認したほうが早い。答えは関数リファレンスではなく、あなたのシナリオの実行ログに表示されている、あの生の文字列の中にあります。


コメント