在 JavaScript 中获取客户端的时区(和偏移量)用getTimezoneOffset()
如何收集访客的时区信息?
我需要两者:
- 时区(例如,欧洲/伦敦)
- 和 UTC 或 GMT 的偏移量(例如,UTC+01)
如何收集访客的时区信息?
我需要两者:
使用偏移量计算时区是一种错误的方法,并且始终会遇到问题。时区和夏令时规则可能会在一年中多次更改,并且很难跟上变化。
要在 JavaScript 中获取系统的 IANA 时区,您应该使用
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)
ecma-402/1.0 表示,如果未提供给构造函数,则可能是未定义的。但是,未来的草案 (3.0) 通过更改为系统默认时区来修复该问题。timeZone
在此版本的 ECMAScript Internationalization API 中,如果在提供给
Intl.DateTimeFormat
构造函数的选项对象中未提供时区
属性,则timeZone
属性将保持未定义状态。但是,应用程序不应依赖此,因为将来的版本可能会返回一个 String 值,以标识主机环境的当前时区。
在 ecma-402/3.0 中,它仍然在草案中,它更改为
在此版本的 ECMAScript 2015 国际化 API 中,如果在提供给构造函数的选项对象中未提供任何属性,则该属性将是默认时区的名称。在这种情况下,以前的版本未定义该属性。
timeZone
timeZone
Intl.DateTimeFormat
timeZone
getTimezoneOffset()
您可以在几分钟内获得时区偏移量,如下所示:
var offset = new Date().getTimezoneOffset();
console.log(offset);
// if offset equals -60 then the time zone offset is UTC+01
时区偏移量是 UTC 与本地时间之间的差值(以分钟为单位)。请注意,这意味着如果本地时区位于 UTC 之后,则偏移量为正,如果位于 UTC 之前,则偏移量为负。例如,如果您的时区是 UTC+10(澳大利亚东部标准时间),则将返回 -600。夏令时可防止此值成为常量,即使对于给定的区域设置也是如此
请注意,并非所有时区都偏移整小时:例如,纽芬兰是 UTC 减去 3h 30m(将夏令时排除在等式之外)。
另请注意,这只给你时区偏移量(例如:UTC+ 01),它不会给你时区(例如:欧洲/伦敦)。