【发布时间】:2020-04-12 17:24:13
【问题描述】:
我正在尝试获取给定国家/地区的 GMT 时差。
但我得到错误的结果,代码为悉尼生成 8 小时而不是正确的 10。
如何解决?
const country = "Australia/Sydney"
const utc_ms = Date.now()
const local_s = new Date(utc_ms).toLocaleString("en-US", {timeZone: country})
const local_ms = (new Date(local_s)).getTime()
const diff = (local_ms - utc_ms)/1000/60/60 // => 8 hours
更新
问题似乎是缺少本地偏移量,下面似乎是正确的代码。如果您知道较短的版本,请分享您的答案。
const country = "Australia/Sydney"
function timezone_offset_min(country: string) {
const local_d = new Date()
const remote_str = local_d.toLocaleString("en-US", { timeZone: country })
const local_ms = local_d.getTime()
const remote_ms = (new Date(remote_str)).getTime()
const local_remote_offset = Math.round((local_ms - remote_ms) / (60 * 1000))
const local_offset = new Date().getTimezoneOffset()
return local_remote_offset + local_offset
}
console.log(timezone_offset_min(country))
【问题讨论】:
-
请查看重复链接。我在那里为我的答案添加了一个不需要 Moment 的解决方案。它与您的方法类似,但更强大。
-
@MattJohnson-Pint 谢谢
标签: javascript time timezone