簡體   English   中英

Intl.DateTimeFormat() 返回錯誤的 UTC 日期

[英]Intl.DateTimeFormat() returns incorrect date for UTC

我正在關注https://devhints.io/wip/intl-datetime

我有一個測試,其中:

const text = Utils.dateToText('2019-05-18T16:00:00Z', 'en-GB')
expect(text).to.equal('Saturday, May 18, 2019, 16:00')

和一個功能:

dateToText(dateTime: string, lang: string[5]): string {
  const date = new Date(dateTime)
  let format = {
     timeZone: 'Europe/London',
     day: '2-digit',
     month: 'long',
     year: 'numeric',
     weekday: 'long',
     hour: '2-digit',
     minute: '2-digit',
     hour12: false
 }
 return new Intl.DateTimeFormat(lang, format).format(date)
}

測試失敗:

斷言錯誤:預期“2019 年 5 月 18 日星期六下午 17:00”等於“2019 年 5 月 18 日星期六下午 16:00” (+ 預期 - 實際)

  -Saturday, May 18, 2019, 17:00
  +Saturday, May 18, 2019, 16:00

因此,根據https://en.wikipedia.org/wiki/ISO_8601日期規范, Z是格林威治時區的祖魯語的象征。 然后我希望2019-05-18T16:00:00Z對於Europe/London仍然是下午 4 點(16:00)。 我以 ISO 格式准確傳遞日期很重要。

當我從日期的末尾(ISO 規范允許)刪除Z時,我得到了正確的結果(16:00)。 但是,我想保留Zulu時間指示器,因為這是我的數據庫當前存儲 DateTime 的方式。

在我的本地機器上,我在歐洲/倫敦時區。 在我的另一台機器上,測試正確通過,但是,在 Gitlab CI 上它拋出一個錯誤。 它顯然與時區有關......

還有什么可以解釋為什么我會出現這種差異或我遺漏了什么嗎?

英國夏令時從 3 月到 10 月運行,對於在此期間的日期,如果使用“歐洲/倫敦”時區顯示,則它們將比格林威治標准時間早 1 小時。

所以Utils.dateToText('2019-05-18T16:00:00Z', 'en-GB') (summer time) 正確返回

2019 年 5 月 18 日,星期六,17:00

雖然Utils.dateToText('2019-01-18T16:00:00Z', 'en-GB') (標准時間)正確返回

2019 年 1 月 18 日,星期五,16:00

請注意時間分量的差異。 所以測試正確失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM