Node-RED で AirTable に日時データを登録するときにタイムゾーンを合わせるメモです。
こちらのデータを Node-RED で一旦受け止めてから情報を付与して AirTable に記録しようとしたときに、フィールドタイプを Date にしているところで時間がズレてしまう現象に出会ったので、原因を調べて修正してみました。
AirTable の内容
状況を切り出してみます。
まず、このようなテーブルがあり DateTime という名前でフィールドタイプを Date にして時間も加えたものがあります。
Node-RED から日時を入れてみるとズレる
AirTable ノードを使って、このようなフローを作ります。
「データ作成」と書いてある change ノードではこのようにデータがあります。
これを実行して、DateTime フィールドに 2021/7/27 13:00
と日時データを入れても時間がズレてしまいます。
ISO フォーマット に直してみる
Formulas and date fields を見ていると、どうもフィールドタイプを Date にしているところは ISO フォーマットに対応しているようです。
たしかに、先ほどのズレも 13:00 が 22:00 になっていて、ちょうど 9 時間ズレていることを考えると、時差が反映されていないようです。
ということで、送るデータを ISO フォーマットに合わせて時差を追加した 2021-07-27T13:00:00+09:00
に変えて送ってみます。
ちゃんと意図通りの時間で反映されました!ということで、AirTable にフィールドタイプを Date にしているところに日時データを登録するときは、ISO フォーマットに合わせた日時の日付で登録すればよいということが分かりました~!
[{"id":"6d713bfd.34db04","type":"airtable out","z":"e5e81c97.443ca","airtable":"73e2413d.dd9d7","operation":"create","outputType":"multiple","table":"DateTime","name":"","x":620,"y":400,"wires":[["d9b67831.f8acc8"]]},{"id":"da7b23b9.105be","type":"inject","z":"e5e81c97.443ca","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":190,"y":400,"wires":[["dcd42011.71bb9"]]},{"id":"d9b67831.f8acc8","type":"debug","z":"e5e81c97.443ca","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":860,"y":400,"wires":[]},{"id":"dcd42011.71bb9","type":"change","z":"e5e81c97.443ca","name":"データ作成","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"Name\":\"CurrentAddData1\",\"DateTime\":\"2021-07-27T13:00:00+09:00\"}","tot":"json"}],"action":"","property":"","from":"","to":"","reg":false,"x":430,"y":400,"wires":[["6d713bfd.34db04"]]},{"id":"73e2413d.dd9d7","type":"airtable","name":"ScrapBox Base"}]
こちらのフローのJSON データも置いておきます。