如何使用 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
怎么办?
https://runkit.com/embed/835tsn9a87so
更新:我将在 VueJS 应用程序中使用它。因此,如果有任何其他相关解决方案,也欢迎使用。谢谢。
要获取用户的 IANA 时区标识符,大多数现代浏览器现在都支持以下内容:
Intl.DateTimeFormat().resolvedOptions().timeZone
也就是说,您需要使用 date-fns-timezone
is when you need to use a different time zone other than the user's local zone. Otherwise, you can usually just use the format
function from date-fns
中的 formatToTimeZone
的通常原因。
但是,在您的情况下,您还尝试使用 z
格式说明符来显示用户的时区缩写。这不是由 date-fns 直接提供的,因此如果这很关键,那么您确实需要使用上面显示的 Intl api 获取用户的时区并使用 formatToTimeZone
.
请记住,这些缩写是 IANA 数据记录的任何内容,只有英文版本,并不是每个时区都有缩写。对于那些没有的,您将看到一个数值,例如 -02
.
此外,许多缩写词可能含糊不清(例如 IST
中的 I
可能表示印度、以色列或爱尔兰,以及许多其他...)。因此,在大多数情况下,如果您不需要缩写,通常最好不要使用它。
我自己刚刚解决了一个类似的问题。诀窍是使用 date-fns-tz
中的 format
函数而不是 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
我有一个要求,我需要显示用户在当地时区的时间。这需要使用 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
怎么办?
https://runkit.com/embed/835tsn9a87so
更新:我将在 VueJS 应用程序中使用它。因此,如果有任何其他相关解决方案,也欢迎使用。谢谢。
要获取用户的 IANA 时区标识符,大多数现代浏览器现在都支持以下内容:
Intl.DateTimeFormat().resolvedOptions().timeZone
也就是说,您需要使用 date-fns-timezone
is when you need to use a different time zone other than the user's local zone. Otherwise, you can usually just use the format
function from date-fns
中的 formatToTimeZone
的通常原因。
但是,在您的情况下,您还尝试使用 z
格式说明符来显示用户的时区缩写。这不是由 date-fns 直接提供的,因此如果这很关键,那么您确实需要使用上面显示的 Intl api 获取用户的时区并使用 formatToTimeZone
.
请记住,这些缩写是 IANA 数据记录的任何内容,只有英文版本,并不是每个时区都有缩写。对于那些没有的,您将看到一个数值,例如 -02
.
此外,许多缩写词可能含糊不清(例如 IST
中的 I
可能表示印度、以色列或爱尔兰,以及许多其他...)。因此,在大多数情况下,如果您不需要缩写,通常最好不要使用它。
我自己刚刚解决了一个类似的问题。诀窍是使用 date-fns-tz
中的 format
函数而不是 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