俺、サービス売って家買うんだ

Swift, Kotlin, Vue.js, 統計, GCP / このペースで作ってればいつか2-3億で売れるのがポっと出来るんじゃなかろうか

Moment.jsを使ってタイムゾーンがEtc/GMTの日付と時刻をAsia/Tokyoに変更する

f:id:ie-kau:20170130023225p:plain:w400


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の違いがよくわかってなかったので参考。

citizen.jp

  • GMT = 英国のグリニッジ(経度0度)の地方平均時(平均太陽が南中する時を正午とする)のこと
  • UTC = 国際原子時と世界時の誤差が0.9秒以上ならないようにうるう秒で調整をしたのがUTC(協定世界時:Coordinated universal time)

一般的には同義と考えて良い。