🐶
【HubSpot API】タイムスタンプの罠
結論:HubSpot APIのタイムスタンプはUNIXタイムスタンプかISO 8601文字列を使いましょう!(2024/6/1時点)
HubSpotの管理画面上では日付プロパティは「2024/06/01」などと表示されています。
しかし、APIでタイムスタンプを操作する場合はUNIXタイムスタンプ、または、ISO 8601文字列を使う必要があります。
HubSpot CRMのdate/dateTimeプロパティ
HubSpotのCRMプロパティでタイムスタンプを扱うものとしては「date」と「dateTime」の2種類があります。
1.date(日付プロパティ)
- 日付のみを保存し、時刻は保存されない
- 日付はUTC午前0時に設定する必要があり、それ以外はエラーになる
- 例: 1430438400000 (2015年05月01日 00:00:00 UTC) - アカウントやユーザーのタイムゾーン設定に関係なく、設定された特定の日付を表示する
2.dateTime(日時プロパティ)
- 任意の時間を保存できる(ミリ秒単位)
- APIを使用してのみ作成可能
- レコードを表示しているユーザーのタイムゾーンに基づいて表示される
Railsでどのように変換するか
主に 「strftimeメソッド」または「localizeメソッド」 を使う方法があります。
それほど多くない使用頻度であれば、一番簡単なのは「strftimeメソッド」かもしれません。
複数箇所で使い回す必要がある場合は「localizeメソッド」を使う方がDRY(Don't Repeat Yourself)で良いですね。
ただし、localizeメソッドを使用する場合はI18nライブラリをインストールする必要があるので注意。
strftimeメソッド
# strftimeメソッドでiso8601を使用する場合
ruquest.created_at.strftime('%Y-%m-%dT00:00:00.000Z')
localizeメソッド
localizeメソッドの場合は先にひと手間
config/locales/ja.yml
ja:
time:
formats:
default: '%Y/%m/%d %H:%M:%S'
iso8601: '%Y-%m-%dT00:00:00.000Z' # 「iso8601」の部分は好きな名前でOK
viewで呼び出しの場合
# ヘルパーメソッドが使えるので、「l」だけでOK
<%= l user.created_at, format: :iso8601 %> # 2024-06-01T00:00:00.000Z
controllerやmodelで呼び出しの場合
formatted_time = I18n.l(request.created_at, format: :iso8601)
わかりやすい説明があるので、詳しくは公式ドキュメントやQiitaの記事を参照してください!
(記事を書いてくれている世界中のエンジニアの皆さん、ありがとうございます!)
Discussion