日付の代わりに時刻
6391 ワード
JavaScriptの日付は基本的にはECMAScript epoch , これは1970年1月1日、UTCと定義されている.しかし、現在のJavaScript
問題😵: ユーザーの現地時間とUTC以外のタイムゾーンのサポートはありません. パーサの振る舞いが信頼できないので、使用できません. Dateオブジェクトは変更可能です. DSTの振る舞いは予測できません. 計算APIは扱いにくい. 非グレゴリオ暦のサポートはありません. 実際にいくつかの問題が修正され、我々はちょうどいくつかの新しい工場機能を追加したり、日付をAPIを作る必要があります.最近、新しいAPIの更新プログラムと呼ばれる
時間APIは、新しいグローバルオブジェクト
新しい時間APIで導入された様々な異なるデータ型がありますが、新しいデータ型の大部分は
オブジェクトは、タイムゾーン情報がない日付と時刻を表します.タイムゾーンがメソッドに渡されない場合は、現在の日付と時刻をメソッドに渡すタイムゾーン、または現在のローカルタイムゾーンから使用します.
エー
エー
エー
まさに
まさに
私たちは、日付や日付の比較を追加または減算などの一般的なユースケースを解決するために使用できるヘルパー機能があります.
JavaScriptのように、追加または減算は本当に行うには迷惑ですが、時間APIですべてのデータ型が組み込まれている
つの一時的な日付オブジェクトが全く同じフィールドを持っているかどうかチェックする簡単な方法.
メソッド名として、
Date
実装.問題😵:
Temporal
完全に日付を革命に行くAPI.現在Temporal
APIはステージ3にあります.チェックアウトし、バグを報告することがありますhere . 実験段階にあるので、生産に使用すべきではない.時間APIは、新しいグローバルオブジェクト
Temporal
JavaScriptには、さまざまな日付ベースの懸念を処理するための新しいメソッドと複数の新しいクラスがたくさん含まれています.この記事では、私は個人的には、このAPIについての詳細を知りたい場合は、私は個人的に考えてAPIのいくつかをカバーするfull docs 時間APIデータ型
新しい時間APIで導入された様々な異なるデータ型がありますが、新しいデータ型の大部分は
plain
and zoned
バージョン.これらの2つのタイプの唯一の違いはplain
タイムゾーン情報がない日付/時刻を表します.エーzoned
datetimeは、特定のタイムゾーンの特定の日付と時刻を表します.それに加えて、他のデータ型もありますDuration
, TimeZone
and Calendar
.平時📆⌚
オブジェクトは、タイムゾーン情報がない日付と時刻を表します.タイムゾーンがメソッドに渡されない場合は、現在の日付と時刻をメソッドに渡すタイムゾーン、または現在のローカルタイムゾーンから使用します.
const today = Temporal.Now.plainDateTimeISO()
console.log(today.toString())
// 2022-04-02T15:54:14.92305492
const date = new Temporal.PlainDateTime(2022, 1, 1)
console.log(date.toString())
// 2022-01-01T00:00:00
const date1 = Temporal.PlainDateTime.from("2022-01-01")
console.log(date1.toString())
// 2022-01-01T00:00:00
const date2 = Temporal.PlainDateTime.from({ year: 2022, month: 1, day: 1 })
console.log(date2.toString())
// 2022-01-01T00:00:00
平年📆
エー
PlainDate
objectは、他の情報がない日付だけを表します.const today = Temporal.Now.plainDateISO()
console.log(today.toString())
// 2022-02-21
const date1 = Temporal.PlainDate.from("2022-01-01")
console.log(date1.toString())
// 2022-01-01
const date2 = Temporal.PlainDate.from({ year: 2022, month: 1, day: 1 })
console.log(date2.toString())
// 2022-01-01
平時⌚
エー
PlainTime
objectはタイムゾーンと日付なしの時間を表します.const today = Temporal.Now.plainTimeISO()
console.log(today.toString())
// 16:09:22.283962281
const time1 = Temporal.PlainTime.from("04:03:25")
console.log(time1.toString())
// 04:03:25
const time2 = Temporal.PlainTime.from({ hour: 4, minute: 3, second: 25 })
console.log(time2.toString())
// 04:03:25
ZoneDateTime🗺
エー
ZonedDateTime
すべてのタイムゾーン関連情報を含むDateTimeです.const today = Temporal.Now.zonedDateTimeISO()
console.info(today.toString())
// 2022-04-02T15:54:14.306655305[America/Chicago]
const date1 = Temporal.ZonedDateTime.from("2022-01-01[America/Los_Angeles]")
console.log(date1.toString())
// 2020-01-01T00:00:00-08:00[America/Los_Angeles]
const date2 = Temporal.ZonedDateTime.from({ year: 2022, month: 1, day: 1, timeZone: "America/Los_Angeles" })
console.log(date2.toString())
// 2020-01-01T00:00:00-08:00[America/Los_Angeles]
インスタント⚡
Instant
はZonedDateTime
しかし、それは常にUTC時間であり、アカウントを特定のカレンダーを取ることはありません.const today = Temporal.Now.instant()
console.log(today.toString())
// 2022-04-02T08:24:41.434881434Z
const date = Temporal.Instant.from("2022-01-01-06:00")
console.log(date.toString())
// 2022-01-01T06:00:00Z
平日
まさに
PlainDate
しかし、それはどんな年の情報も含みません.const date1 = Temporal.PlainMonthDay.from("01-01")
console.log(date1.toString())
// 01-01
const date2 = Temporal.PlainMonthDay.from({ month: 1, day: 1 })
console.log(date2.toString())
// 01-01
前月
まさに
PlainDate
しかし、それはどんな日情報も含みません.const date1 = Temporal.PlainYearMonth.from("2022-01")
console.log(date1.toString())
// 2022-01
const date2 = Temporal.PlainYearMonth.from({ year: 2022, month: 1 })
console.log(date2.toString())
// 2022-01
ヘルパーメソッド🛠
私たちは、日付や日付の比較を追加または減算などの一般的なユースケースを解決するために使用できるヘルパー機能があります.
追加➕ / 減算する➖
JavaScriptのように、追加または減算は本当に行うには迷惑ですが、時間APIですべてのデータ型が組み込まれている
add
and subtract
それは信じられないほど簡単にする方法.const today = Temporal.Now.plainDateISO()
console.log("Today: " + today.toString())
console.log("Result: " + today.add({ days: 7, months: 1 }).toString())
// Today: 2022-04-02
// Result: 2022-05-09
等しい
つの一時的な日付オブジェクトが全く同じフィールドを持っているかどうかチェックする簡単な方法.
const today = Temporal.Now.plainDateISO()
const today2 = Temporal.Now.plainDateISO()
console.log(today === today2)
// false
console.log(today.equals(today2))
// true
with
with
メソッドは、現在の日付オブジェクトで上書きするフィールドのオブジェクトを受け取ります.const today = Temporal.Now.plainDateISO()
console.info(today.toString())
console.log(today.with({ year: 2027, month: 3 }).toString())
// 2022-04-02
// 2027-03-02
比較する⚖
メソッド名として、
compare
一時的な日付オブジェクトまたはISO 8601文字列と比較する方法.const today = Temporal.Now.plainDateISO()
const yesterday = today.subtract({ days: 1 })
const tomorrow = '2022-04-03'
console.log([today, yesterday, tomorrow].sort(Temporal.PlainDate.compare))
// [Temporal.PlainDate <2022-04-01>, Temporal.PlainDate <2022-04-02>, '2022-04-03']
結論
Temporal
APIはJavaScriptの日付に対処するための素晴らしいAPIです.現在のところ、このAPIのサポートはまだありません.しかし、このAPIで試したい場合は、Polyfillを使用することができます.このAPIで利用できる複数のポリフィルがあります、私が使用しているものは@js-temporal/polyfill . あなたの読書をありがとう.Reference
この問題について(日付の代わりに時刻), 我々は、より多くの情報をここで見つけました https://dev.to/yenyih/temporal-instead-of-date-3e0dテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol