繁体   English   中英

Javascript 时区 gmt 和偏移量

[英]Javascript timezone gmt and offset

当涉及到 Javascript Date 类时,我已经阅读了很多关于 UTC/GMT 和时区的内容。 但是有一点我不明白:

const date = new Date('August 19, 1975 23:15:30 GMT+04:00');
const offset = date.getTimezoneOffset()

我认为“GMT+0400”表示我的当前日期比 UTC 时间早 4 小时。 所以 UTC 将是“1975 年 8 月 19 日 19:15:30”

为什么“偏移”不是-4? 'getTimezoneOffset' 是否使用我浏览器的语言环境,如果是,我是否可以在特定时区创建日期?

我认为“GMT+0400”表示我的当前日期比 UTC 时间早 4 小时。

GMT+0400表示字符串中的文本以 GMT+0400 表示。 但是 JavaScript Date 实例不允许您指定它们使用的时区。 它们使用从 1970 年 1 月 1 日午夜 UTC 开始的以毫秒为单位的偏移量,并提供函数来访问它们表示的时间部分,或者以相对于运行代码的系统的时区为单位( getDategetHours等)。 ) 或相对于 UTC 的单位 ( getUTCDate , getUTCHours )。 getTimezoneOffset告诉您它们之间的区别是什么。

因此,尽管您提供要解析的日期的文本以 GMT+0400 表示,但实例用于本地时间函数的时区始终是本地时区。

这是该事实的一个示例:以不同时区表示的两个字符串,但会产生等效的Date实例:

 const s1 = "2020-08-31 12:30:00-0300"; const s2 = "2020-08-31 20:30:00+0500"; const d1 = new Date(s1); const d2 = new Date(s2); console.log(`s1 = ${s1}`); console.log(`d1 = ${d1.toString()}`); console.log(`s2 = ${s2}`); console.log(`d2 = ${d2.toString()}`); console.log(`d1 and d2 equivalent? ${d1.getTime() === d2.getTime()}`);

'getTimezoneOffset' 是否使用我浏览器的语言环境

是的。

...如果是这样,无论如何我可以在特定时区创建一个日期?

不会。但是新的Temporal 提案可能会让您拥有具有指定时区的Temporal.Absolute实例。 (它仍处于早期阶段,所以事情可能会改变。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM