Make.comの日付変換でずれる原因と、formatDateの正しい書き方 2026

AIツール紹介

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つ渡すとすれば、まず実行ログで実際の値を見ることです。頭の中で式を追うより、何が入っているかを目で確認したほうが早い。答えは関数リファレンスではなく、あなたのシナリオの実行ログに表示されている、あの生の文字列の中にあります。

コメント

タイトルとURLをコピーしました