ISO 8601のUTCタイムゾーンでtimestampが保存されたMongoDBがあります。レンジクエリを書くときにISO 8601で引数を渡していますが、UNIXタイムスタンプを使ってクエリできないか調べました。Moment.jsを使うといろいろな表記の日付をパースしたりフォーマットすることができます。
テスト用のDockerコンテナ
Dockerイメージをビルドするプロジェクトを作成します。
$ mkdir -p ~/node_apps/moment-spike |
{ |
Dockerfileを作成してイメージをビルドします。ベースイメージはgoogle/nodejs-runtimeを使います。
$ echo FROM google/nodejs-runtime > Dockerfile |
使い方
使い捨てのDockerコンテナを起動します。
$ docker run --rm -it moment-spike |
moment(timestamp * 1000)
UNIXタイムスタンプの作成はmoment().unix()
を使います。
> var moment = require('moment') |
UNIXタイムスタンプをフォーマットするときはX
を指定します。単位が秒のまま引数に渡すとパースできません。
> moment(start).format() |
Unix Offset (milliseconds)にあるように、moment(Number);
のNumberはJavaScriptのnew Date(Number)
と同様にミリ秒です。moment(timestamp * 1000)
のように1000倍にしてもパースできます。
> moment(start*1000).format() |
ISO 8601表記にする
Moment.jsで作成した日付をISO 8601表記にする場合はDate.prototype.toISOString関数を使います。
> moment(start*1000).toISOString(); |