Moment.jsを使ってタイムゾーンがEtc/GMTの日付と時刻をAsia/Tokyoに変更する
iOSのIn-App Purchase の Auto-Renewing subscription (自動更新型の購読)を利用した開発では購入処理が走った際や、期限切れの際にAppleから得られるレシートの検証をAppleのサーバーにpostして行う必要があります。
当然ながら有効期限を表すexpires_date など時間に関するデータのタイムゾーンは標準時です。Appleの場合Etc/GMT。
現在進めている開発ではDBやサーバーのOSはAisa/Tokyoで動作させているので、データベース追加時や期限切れの確認のときには当然タイムゾーン変更する処理が必要になります。
バックエンドはNodeで作っているので、時間を扱うのに便利なMoment.jsを利用してタイムゾーンを変更していきます。
返ってくるデータの例 : 2017-01-30 16:03:34 Etc/GMT
const datetime = "2017-01-30 16:03:34 Etc/GMT".split(" ") moment.tz(`${datetime[0]} ${datetime[1]}`, datetime[2]).clone().tz("Asia/Tokyo").format("YYYY-MM-DD HH:mm:ss") // => 2017-01-31 01:03:34
と言った具合簡単にタイムゾーンの変更ができます。
とはいえ調べる必要があったのでメモメモ。
関係ないけどUTCとGMTの違いがよくわかってなかったので参考。
- GMT = 英国のグリニッジ(経度0度)の地方平均時(平均太陽が南中する時を正午とする)のこと
- UTC = 国際原子時と世界時の誤差が0.9秒以上ならないようにうるう秒で調整をしたのがUTC(協定世界時:Coordinated universal time)
一般的には同義と考えて良い。