🕛

日付変換の基礎知識

2022/06/01に公開

はじめに

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の日付操作ライブラリです。
日付の取得や変換が簡単にできるようになります。
https://day.js.org/en/

下記のようにフォーマットを指定することで、簡単に日付の表示形式を変更することができます。

import dayjs from 'dayjs';

const date = '2022-06-01'
const object = new Date(date)
dayjs(object).format('YYYY年MM月DD日')

その他の日付操作はこちらをご参照ください!
https://www.wakuwakubank.com/posts/743-javascript-dayjs/

最後に

最後に宣伝ですが、sweeepではエンジニアを募集しています。ご興味のある方は下記リンクよりご応募お待ちしております!

https://corp.sweeep.ai/recruit

GitHubで編集を提案

Discussion