0%

Moment Timezoneを使って日付をJSTに変換する

Moment TimezoneはIANAのtz databaseを使ってMoment.jsにタイムゾーン操作のAPIを追加してくれます。前回確認したMoment.jsでも+09:00するとJSTになりますが自分で計算するのが面倒です。Asia/Tokyoのようにタイムゾーンを指定して変換できると便利です。

テスト用のDockerコンテナ

Dockerイメージをビルドするプロジェクトを作成します。

$ mkdir -p ~/node_apps/moment-tz-spike
$ cd !$

package.jsonにmoment-timezoneパッケージを指定します。

~/node_apps/moment-tz-spike/package.json
{
"name": "moment-tz-spike",
"version": "0.0.1",
"private": true,
"dependencies": {
"moment-timezone": "0.3.1"
},
"scripts": {"start": "node"}
}

Dockerイメージをビルドしてコンテナを起動します。

$ docker build -t moment-tz-spike .
$ docker run --rm -it moment-tz-spike

> moment-tz-spike@0.0.1 start /app
> node

>

使い方

タイムゾーンをAsia/Tokyoに指定して現在時刻をISO 8601表示の日付にフォーマットします。

> var moment = require('moment-timezone');
> moment().tz("Asia/Tokyo").format();
'2015-04-08T10:29:25+09:00'

UTCからJSTに変換します。

> moment('2015-04-08T02:36:45.408Z').tz("Asia/Tokyo").format()
'2015-04-08T11:36:45+09:00'

指定したISO 8601表示の日付をUNIXタイムスタンプに変換します。

> moment('2015-04-08T02:36:45.408Z').tz('Asia/Tokyo').unix()
1428460605

UNIXタイムスタンプからISO 8601表示の日付にフォーマットします。

> moment(1428460605,'X').tz("Asia/Tokyo").format()
'2015-04-08T11:36:45+09:00'