2018年4月6日金曜日

Docker + Nodejs で JST の時刻を取得する

概要

DockerHub で公開されている nodejs の公式イメージを使うとタイムゾーンは UTC になっています
イメージ自体のタイムゾーンを JST にしても良いですが nodejs 上変換することもできるようなので紹介します

環境

  • macOS 10.13.2
  • nodejs 8.7.0
  • docker 18.03.0-ce, build 0520e24

準備

  • npm init
  • npm install moment-timezone --save

npm test でメインのスクリプトを実行できるようにしておきます

  • vim package.json
{
  "name": "jst",
  "version": "1.0.0",
  "description": "",
  "main": "date.js",
  "scripts": {
    "test": "node date.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "moment-timezone": "^0.5.14"
  }
}

サンプルコード

今回は普通の Date クラスと moment-timezone を使った場合の時刻の違いを見ていきます

  • vim date.js
d = new Date();
console.log(d.getHours());

var moment = require('moment-timezone');
today = moment().tz("Asia/Tokyo");
console.log(today.get('hours'));

こんな感じです
ローカルの Mac はタイムゾーンが JST なので実行すると同じ時刻が表示されると思います

Docker 上で実行してみる

サンプルコードを Docker 上で実行してみましょう

  • vim Dockerfile
FROM node

ADD . /home
WORKDIR /home
RUN npm install

CMD ["npm", "test"]
  • docker build -t date_test .
  • docker run --rm date_test

で実行すると

0
9

という感じで 9 時間差があることがわかると思います

最後に

タイムゾーンを気にして時刻を扱う場合は moment-timezone というライブルを使うのが定石っぽいです

0 件のコメント:

コメントを投稿