概要
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 件のコメント:
コメントを投稿