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

我两者都需要:

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


当前回答

试试这个:

new Date().toLocaleString("en-US",Intl.DateTimeFormat().resolvedOptions().timeZone)

这将在客户端的浏览器上查找timeZone。

其他回答

你可以简单地试试这个。 它将返回您当前的机器时间

var _d = new Date(), T = 0, d = new Date(t*1000 + _d.getTime())

将OffSet转换为正数:

var offset = new Date().getTimezoneOffset();
console.log(offset);
this.timeOffSet = offset + (-2*offset);
console.log(this.timeOffSet);

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

要获得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属性在本例中未定义。

试试这个,

new Date().toString().split("GMT")[1].split(" (")[0]

看到这个结果操作符与Timezone相反,所以应用一些数学函数,然后验证num或多或少。

请参见MDN文档 var a = new Date().getTimezoneOffset(); var res = - math .round(a/60)+':'+-(a%60); Res = Res < 0 ? Res: '+'+ Res; console.log (res)