如何在VueJS应用中使用date-fns猜测用户的时区?

时间:2019-02-06 14:05:19

标签: javascript vue.js vuejs2 timezone 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应用程序中使用它。因此,如果还有其他相关解决方案,也欢迎您使用。谢谢。

1 个答案:

答案 0 :(得分:2)

要获取用户的IANA时区标识符,大多数现代浏览器现在都支持以下内容:

Intl.DateTimeFormat().resolvedOptions().timeZone

也就是说,您需要使用date-fns-timezone中的formatToTimeZone的通常原因是,您需要使用除用户本地区域以外的其他时区。否则,通常只能使用date-fns中的format函数。

但是,在您的情况下,您还尝试使用z格式说明符来显示用户的时区缩写。 date-fns不直接提供此功能,因此,如果这很关键,那么您确实需要使用上面显示的Intl api获取用户的时区并使用formatToTimeZone

请记住,尽管这些缩写是IANA数据记录的任何内容,仅以英语显示,并且并非每个时区都有缩写。对于那些没有的,您将看到一个数字值,例如-02

此外,许多缩写可能是模棱两可的(例如I中的IST可能意味着印度,以色列或爱尔兰,还有许多其他缩写...)。因此,在大多数情况下,如果您不需要缩写,通常不用它会更好。