con*_*ius 125 javascript browser timezone http
有没有可靠的方法从客户端浏览器获取时区?我看到了以下链接,但我想要一个更强大的解决方案.
Wal*_*ace 146
五年后,我们有了内置的方式!对于现代浏览器,我会使用:
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
console.log(tz);
Run Code Online (Sandbox Code Playgroud)
它可能不适用于您需要支持的浏览器,如果是这种情况,我会回到之前答案中提供的库之一.
不适用于firefox(51及以下)和IE https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/resolvedOptions#Browser_compatibility
Geo*_*zen 84
看看这个存储库pageloom它是有帮助的
下载jstz.min.js并在你的html页面中添加一个函数
<script language="javascript">
function getTimezoneName() {
timezone = jstz.determine()
return timezone.name();
}
</script>
Run Code Online (Sandbox Code Playgroud)
并从您的显示标签调用此功能
Chr*_* W. 71
通常当人们在寻找"时区"时,只需"UTC偏移"即可.例如,他们的服务器是UTC + 5,他们想知道他们的客户端是以UTC-8运行的.
在普通的旧javascript (new Date()).getTimezoneOffset()/60
中将返回当前偏离UTC的小时数.
值得注意的是getTimezoneOffset()
返回值的符号中可能出现的"陷阱" (来自MDN文档):
时区偏移是UTC与本地时间之间的差异(以分钟为单位).请注意,这意味着如果本地时区落后于UTC,则偏移量为正,如果前置,则偏移量为负.例如,对于时区UTC + 10:00(澳大利亚东部标准时间,符拉迪沃斯托克时间,查莫罗标准时间),将返回-600.
但是,我建议您将moment.js用于与时间/日期相关的Javascript代码.在这种情况下,您可以通过运行以下方式获得ISO 8601格式的UTC偏移:
> dayjs().format("Z")
"-08:00"
Run Code Online (Sandbox Code Playgroud)
(可能会提到客户端可以轻易伪造此信息.)
Joh*_*off 45
目前,最好的选择可能是mbayloon的回答中建议的jstz.
为了完整起见,应该提到它有一个标准:Intl.你可以在Chrome中看到这个:
> Intl.DateTimeFormat().resolvedOptions().timeZone
"America/Los_Angeles"
Run Code Online (Sandbox Code Playgroud)
(这实际上并不遵循标准,这是坚持使用库的另一个原因)
您可以使用moment-timezone来猜测时区:
> moment.tz.guess()
"America/Asuncion"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
166171 次 |
最近记录: |