如何收集访问者的时区信息?

我两者都需要:

时区(例如,欧洲/伦敦) 与UTC或GMT的偏移(例如,UTC+01)


当前回答

使用偏移量来计算时区是一种错误的方法,您总是会遇到问题。时区和夏令时规则可能会在一年中发生几次变化,并且很难跟上变化。

要获得JavaScript格式的系统IANA时区,您应该使用

控制台日志(Intl DateTimeFormat resolvedOptions()()。timeZone)

截至2023年2月,全球93.75%的浏览器都能正常运行。

旧的兼容性信息

ecma-402/1.0说timeZone如果没有提供给构造函数,可能是未定义的。然而,未来的草案(3.0)通过更改系统默认时区修复了这个问题。

在此版本的ECMAScript国际化API中, 如果没有timeZone属性,则timeZone属性将保持未定义 提供在提供给Intl的options对象中。DateTimeFormat 构造函数。但是,应用程序不应该依赖于此,因为未来 版本可能返回一个String值,用于标识主机环境 改为当前时区。

在ecma-402/3.0草案中,它被改成了

在此版本的ECMAScript 2015国际化API中 如果没有,timeZone属性将是默认时区的名称 属性在options对象中提供 Intl。DateTimeFormat构造函数。上一版本的 timeZone属性在本例中未定义。

其他回答

使用momentjs,您可以找到当前时区为

console.log(时刻).utcOffset ());//(-240, -120, - 60,0, 60,120, 240,等等) < script src = " https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js " > < /脚本>


使用dayjs,您可以找到当前时区为

console.log(dayjs().utcOffset());(-240、-120、-60、0、60、120、240 等) <script src=“https://unpkg.com/dayjs@1.8.10/dayjs.min.js”></script>

这两个API都返回以分钟为单位的utc偏移量。

现在医生 Dayjs医生

moment.js:

moment().format('zz');

这对我来说是很好的工作:

// Translation to offset in Unix Timestamp
let timeZoneOffset = ((new Date().getTimezoneOffset())/60)*3600;

在新的Date()中,你可以获得偏移量,要获得时区名称,你可以这样做:

.replace .toString新的日期()() (/(.*\((.*)\).*)/, '$ 2》);

在日期的末尾得到between()值,即时区的名称。

使用偏移量来计算时区是一种错误的方法,您总是会遇到问题。时区和夏令时规则可能会在一年中发生几次变化,并且很难跟上变化。

要获得JavaScript格式的系统IANA时区,您应该使用

控制台日志(Intl DateTimeFormat resolvedOptions()()。timeZone)

截至2023年2月,全球93.75%的浏览器都能正常运行。

旧的兼容性信息

ecma-402/1.0说timeZone如果没有提供给构造函数,可能是未定义的。然而,未来的草案(3.0)通过更改系统默认时区修复了这个问题。

在此版本的ECMAScript国际化API中, 如果没有timeZone属性,则timeZone属性将保持未定义 提供在提供给Intl的options对象中。DateTimeFormat 构造函数。但是,应用程序不应该依赖于此,因为未来 版本可能返回一个String值,用于标识主机环境 改为当前时区。

在ecma-402/3.0草案中,它被改成了

在此版本的ECMAScript 2015国际化API中 如果没有,timeZone属性将是默认时区的名称 属性在options对象中提供 Intl。DateTimeFormat构造函数。上一版本的 timeZone属性在本例中未定义。