日付の代わりに時刻


JavaScriptの日付は基本的にはECMAScript epoch , これは1970年1月1日、UTCと定義されている.しかし、現在のJavaScriptDate 実装.
問題😵:
  • ユーザーの現地時間とUTC以外のタイムゾーンのサポートはありません.
  • パーサの振る舞いが信頼できないので、使用できません.
  • Dateオブジェクトは変更可能です.
  • DSTの振る舞いは予測できません.
  • 計算APIは扱いにくい.
  • 非グレゴリオ暦のサポートはありません.
  • 実際にいくつかの問題が修正され、我々はちょうどいくつかの新しい工場機能を追加したり、日付をAPIを作る必要があります.最近、新しいAPIの更新プログラムと呼ばれる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]
    

    インスタント⚡

    InstantZonedDateTime しかし、それは常に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 . あなたの読書をありがとう.