備忘録的にメモ
ISO 8601
時刻を表すフォーマットはたくさんありますが、よく使用されるISO 8601。
ISO 8601では以下のように時刻を表します。
拡張表記 | 基本表記 | タイムゾーン | 表す時間 |
---|---|---|---|
2022-02-27T15:08:10+09:00 | 20220227T150810+0900 | JST(日本時間) | 日本時間2022年2月27日15時8分10秒 |
2022-02-27T06:08:10Z | 20220227T060810Z | UTC(協定世界時) | 2022年2月27日6時8分10秒 |
拡張表記が結構APIとかで使われる気がする。
("+09:00"はローカル時であることを表すだけなので、そこから9時間引いて計算し直す必要は無い...!)
Dateでの扱い方
すべてUTCに変換すると、タイムゾーンを気にする必要は特にない。
getTime()
をメソッドを用いると協定世界時の1970年1月1日00:00:00からの経過ミリ秒が得られる。
なので一度getTime()を通せば経過時間などを簡単に計算できる。
> const date = new Date(); //現在の時刻を表すDateオブジェクト
> date.getTime();
1645880642927
> new Date(date.getTime());
2022-02-26T13:04:02.927Z
> const date = new Date('2022-02-26T22:04:00+09:00'); //タイムゾーンを用いたDateオブジェクト
> date.getTime();
1645880640000
> new Date(date.getTime());
2022-02-26T13:04:00.000Z
なので、経過時間を計算するには以下の文だけでOK(時差考慮必要なし)
const start = new Date('2022-02-26T22:04:00+09:00');
const now = new Date();
// 経過時間をミリ秒で取得
const elapse = now.getTime() - start.getTime();
(Date.now()
やnew Date()
を使う際、これはちゃんとタイムゾーンを考慮しなきゃいけないんだっけ...?と思うけど結局UTC基準に変換しているので、特に考慮する必要は無い...!)
参照
間違いがあったらご指摘ください。