Temporal
日時を操作するための新しいグローバルオブジェクトとして提案されているECMAScript Proposal
現状への課題と特徴
Dateでの不満点 by https://maggiepint.com/2017/04/09/fixing-javascript-date-getting-started/
ユーザーの現地時間と UTC 以外のタイムゾーンはサポートされない
パーサーの動作が信頼性が低すぎて使用できない
日付オブジェクトが何を指しているのかわかりづらい
サマータイム動作が不安定
日時計算の API が扱いにくい
非グレゴリオ暦がサポートされていない
Wall-Clock TimeとExact Timeの分離
Wall-Clock Time
カレンダーに依存した日付・時刻
Exact Time
UTC 時間
地球上のどこでも同じ日付・時刻
パースするための日時を表す文字列を新しく定義した
→ IXDTFとして標準化された
日時を表すデータ形式
Temporal.Instant
ExactTimeを持っているデータ形式
UNIXエポックからの時間をナノ秒単位の精度で保存している
bigintで持ってる
カレンダーとタイムゾーンの情報を持たない
Plain〇〇
持つ・持たない
Exact Timeの情報を持たない
タイムゾーンの情報を持たない
カレンダー情報は持つものもある(日付系は基本持つ)
デフォは ISO 8601 calendar
この「カレンダーのこの日!この時間!」みたいな情報だけを持っている
それが地球上のどこのいつなのかを気にしない
Temporal.ZonedDateTime
Exact Time・タイムゾーン・カレンダー情報などを全てもつ情報
その他必要なデータ構造
Temporal.TimeZone
タイムゾーンに関するもの
exact time と wall-clock を相互に変換できる
IANA タイムゾーンや特定の UTC オフセット
Temporal.Calendar
Calendarに関するもの
独自のカレンダーシステムも作れるみたい
Temporal.Duration
時間の長さのデータ
https://gyazo.com/855b3fc4bfff97c1c14f4ef132600597
各データ形式の主要API
変換
Exact Time→Wall-Clock Time
Instant.toZonedDateTimeでTemporal.ZonedDateTimeを経由すると現地での日時に関して好きなデータが取れる
Wall-Clock Time→Exact Time
Temporalにおけるタイムゾーンの曖昧性