簡體   English   中英

如何使用 date-fns 猜測用戶的時區?

[英]How to guess user's timezone using date-fns?

我有一個要求,我需要在當地時區顯示用戶的時間。 這需要使用 date-fns 來完成。

以下代碼檢查當前時間,然后根據時區將其轉換為本地時間。

const { formatToTimeZone } = require('date-fns-timezone')

let date = new Date()
const format = 'D.M.YYYY HH:mm:ss [GMT]Z (z)'
const output = formatToTimeZone(date, format, { timeZone: 'Asia/Calcutta' })

但是,我如何即時猜測用戶的時區?

moment.js ,您可以通過moment.tz.guess()獲得它。 但是如果沒有moment.js和使用date-fns moment.js ,我怎么能做到呢?

https://runkit.com/embed/835tsn9a87so

更新:我將在 VueJS 應用程序中使用它。 因此,如果有任何其他相關解決方案,也歡迎使用。 謝謝。

為了獲取用戶的 IANA 時區標識符,大多數現代瀏覽器現在支持以下內容:

Intl.DateTimeFormat().resolvedOptions().timeZone

也就是說,您需要使用date-fns-timezone formatToTimeZone date-fns-timezone formatToTimeZone的通常原因是您需要使用用戶本地區域以外的其他時區。 否則,您通常可以只使用date-fnsformat函數。

但是,在您的情況下,您還嘗試使用z格式說明符來顯示用戶的時區縮寫。 這不是由 date-fns 直接提供的,因此如果這很重要,那么您確實需要使用上面顯示的 Intl api 獲取用戶的時區並使用formatToTimeZone

但請記住,這些縮寫是 IANA 數據記錄的任何內容,只有英文,並且沒有每個時區的縮寫。 對於那些沒有的,您將看到一個數值,例如-02

此外,許多縮寫詞可能含糊不清(例如ISTI可能表示印度、以色列或愛爾蘭,以及其他許多……)。 因此,在大多數情況下,如果您不需要縮寫,通常最好不要使用它。

剛剛自己解決了類似的問題。 訣竅是使用format從功能date-fns-tz而不是從一個date-fns

import { format } from "date-fns";
console.log(format(new Date(), "yyyy-MM-dd HH:mm z"));
// 2021-11-29 13:55 GMT-8

import { format } from "date-fns-tz";
console.log(format(new Date(), "yyyy-MM-dd HH:mm z"));
// 2021-11-29 13:55 PST

請參閱此處的文檔: https : //date-fns.org/v2.27.0/docs/Time-Zones

暫無
暫無

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

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