【问题标题】:Javascript timezone gmt and offsetJavascript 时区 gmt 和偏移量
【发布时间】:2020-08-31 14:28:32
【问题描述】:

当谈到 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 将是 'August 19, 1975 19:15:30'

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

【问题讨论】:

    标签: javascript timezone timezone-offset


    【解决方案1】:

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

    GMT+0400 声明 字符串中的文本 以 GMT+0400 表示。但是 JavaScript Date 实例不允许您指定它们使用的时区。它们使用从 1970 年 1 月 1 日午夜 UTC 开始的毫秒偏移量,并提供函数来访问它们所代表的时间部分,或者以相对于运行代码的系统的时区为单位(getDate,@987654324 @ 等)或相对于 UTC 的单位(getUTCDategetUTCHours)。 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 proposal 可能会让您拥有具有指定时区的Temporal.Absolute 实例。 (它仍处于早期阶段,所以情况可能会发生变化。)

    【讨论】:

      猜你喜欢
      • 2012-11-28
      • 2015-01-03
      • 2022-11-25
      • 2016-11-25
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多