LoginSignup
11
7

More than 5 years have passed since last update.

Moment.jsを使ってUNIXタイムスタンプをISO 8601表記に変換する

Posted at

ISO 8601のUTCタイムゾーンでtimestampが保存されたMongoDBがあります。レンジクエリを書くときにISO 8601で引数を渡していますが、UNIXタイムスタンプを使ってクエリできないか調べました。Moment.jsを使うといろいろな表記の日付をパースしたりフォーマットすることができます。

テスト用のDockerコンテナ

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

$ mkdir -p ~/node_apps/moment-spike
$ cd !$
~/node_apps/moment-spike/package.json
{
    "name": "moment-spike",
    "version": "0.0.1",
    "private": true,
    "dependencies": {
       "moment": "~2.8.1"
    },
    "scripts": {"start": "node"}
}

Dockerfileを作成してイメージをビルドします。ベースイメージはgoogle/nodejs-runtimeを使います。

$ echo FROM google/nodejs-runtime > Dockerfile
$ docker pull google/nodejs-runtime
$ docker build -t moment-spike .

使い方

使い捨てのDockerコンテナを起動します。

$ docker run --rm -it moment-spike 

> moment-spike@0.0.1 start /app
> node

>

moment(timestamp * 1000)

UNIXタイムスタンプの作成はmoment().unix()を使います。

> var moment = require('moment')
undefined
> start = moment().unix()
1428393579

UNIXタイムスタンプをフォーマットするときはXを指定します。単位が秒のまま引数に渡すとパースできません。

> moment(start).format()
'1970-01-17T12:46:33+00:00'
> moment(start,'X').format();
'2015-04-07T07:59:39+00:00'

Unix Offset (milliseconds)にあるように、moment(Number);のNumberはJavaScriptのnew Date(Number)と同様にミリ秒です。moment(timestamp * 1000)のように1000倍にしてもパースできます。

> moment(start*1000).format()
'2015-04-07T07:59:39+00:00'

ISO 8601表記にする

Moment.jsで作成した日付をISO 8601表記にする場合はDate.prototype.toISOString関数を使います。

> moment(start*1000).toISOString();
'2015-04-07T07:59:39.000Z'
11
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
7