[英]How to display the abbreviated name of the user's timezone (not GMT offset) in JavaScript?
[英]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 开始的以毫秒为单位的偏移量,并提供函数来访问它们表示的时间部分,或者以相对于运行代码的系统的时区为单位( getDate
、 getHours
等)。 ) 或相对于 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.