日付変換の基礎知識
はじめに
sweeep株式会社エンジニアの今福です。
今回は日付に関する記事をまとめます。
日付と一言に言っても、タイムゾーンや表示形式が複数あり、各レイヤーで最適なタイムゾーン、表示形式に変換する必要があります。
たとえば、UI上はユーザが直感的に理解できる日付の表示を行いつつ、BEではグローバル展開も視野にUTCでデータを保管するケースがあります。
UI | FE | BE / DB | |
---|---|---|---|
タイムゾーン | ユーザが属するタイムゾーン (JSTなど) |
- | UTC |
日付形式 | YYYY年MM月DD日 YYYY-MM-DD など |
Dateオブジェクト | ISO8601形式 |
タイムゾーンについて
UTC(Universal Time Coordinated: 協定世界時)
世界で標準時として使用されていて、セシウム原子が振動から導き出された時間です。
グリニッジ標準時(GMT)と一致していますが、計算方法が異なります。
世界のタイムゾーンは、UTC からの正または負のオフセットとして表現されます。
JST(Japan Standard Time: 日本時間)
日本で使用されているタイムゾーンで、UTCに+9時間した時刻です。
ISO8601について
ISO8601とは「ISOで定められた日付と時刻の表記に関する国際規格」のことです。
日付と時刻を「T」で区切ります。
UTCの場合、秒の後に「Z」を付け、その他のタイムゾーンの場合、秒の後に「±時間」を表記して、タイムゾーンごとの違いを表します。
例)2022年6月1日15:00(JST)
タイムゾーン | 基本形式 | 拡張形式 |
---|---|---|
UTC | 20220601T060000Z | 2022-06-01T06:00:00Z |
JST | 20220601T150000+0900 | 2022-06-01T15:00:00+09:00 |
タイムゾーン、日付形式の変換
Dateオブジェクトの作成
Dateオブジェクト作成時、タイムゾーンを指定した場合は指定したタイムゾーン、指定しなかった場合はローカルの環境で設定されているタイムゾーンが指定されます。
// タイムゾーンを指定しない場合
const d1 = new Date('2022-06-01T15:00:00')
console.log(d1)
// Wed Jun 01 2022 15:00:00 GMT+0900 (日本標準時)
// JSTを指定した場合
const d2 = new Date('2022-06-01T15:00:00+0900')
console.log(d2)
// Wed Jun 01 2022 15:00:00 GMT+0900 (日本標準時)
// UTCを指定した場合
const d3 = new Date('2022-06-01T15:00:00Z')
console.log(d3)
// Thu Jun 02 2022 00:00:00 GMT+0900 (日本標準時)
JST -> UTC, ISO8601形式
UTCおよびISO8601形式への変換は、toISOString()
で行えます。
const object = new Date('2022-06-01T15:00:00+0900')
const iso = object.toISOString()
console.log(object)
// Wed Jun 01 2022 15:00:00 GMT+0900 (日本標準時)
console.log(iso)
// '2022-06-01T06:00:00.000Z'
Day.jsについて
Day.jsとはJavaScriptの日付操作ライブラリです。
日付の取得や変換が簡単にできるようになります。
下記のようにフォーマットを指定することで、簡単に日付の表示形式を変更することができます。
import dayjs from 'dayjs';
const date = '2022-06-01'
const object = new Date(date)
dayjs(object).format('YYYY年MM月DD日')
その他の日付操作はこちらをご参照ください!
最後に
最後に宣伝ですが、sweeepではエンジニアを募集しています。ご興味のある方は下記リンクよりご応募お待ちしております!
Discussion