【问题标题】:JavaScript automatically setting the timezone on Date objectJavaScript 自动设置 Date 对象的时区
【发布时间】:2021-09-27 21:40:45
【问题描述】:

我正在使用 JavaScript 中的一些日期,格式为 YYYY-MM-DD HH:MM:SS。当我使用 const date = new Date(inputDate) 将其转换为日期对象时,我希望收到一个使用 UTC 时间的 Date 对象,但是,我得到的是我当地时区的日期。

我已尝试按照here 中描述的步骤转换为 UTC,但没有任何成功。我发现的一种解决方法是更改​​我的输入日期以包含所需的时区——即YYYY-MM-DD HH:MM:SS UTC,但这感觉像是一个不能很好扩展的讨厌的解决方法。

我也无法在定义新创建的日期后将其转换为 UTC,因为这只是给出了 UTC 表示,而不是使用适当时区的日期

我如何才能在 UTC 中创建日期,以便使用 Date.now() 完成的任何操作与创建日期没有时区差异?

【问题讨论】:

    标签: javascript date datetime


    【解决方案1】:

    先见Why does Date.parse give incorrect results?

    如果您希望将字符串解析为 UTC,则它需要采用 ECMA-262 支持的格式,例如“YYYY-MM-DDTHH:mm:ss±HH:mm”(其中偏移量也可以是"Z") 具有适当的偏移量(+00:00 或 Z),或者您应该自己解析它。考虑:

    // Parse YYYY-MM-DD HH:MM:SS string as UTC
    function parseUTC(ts) {
      let [Y, M, D, H, m, s] = ts.split(/\W/);
      return new Date(Date.UTC(Y, M-1, D, H, m, s));
    }
    
    // 2021-09-28T15:32:45.000Z
    console.log(parseUTC('2021-09-28 15:32:45').toISOString());

    你也可以这样做:

    let s = '2021-09-28 15:32:45';
    new Date(s.replace(' ','T') + 'Z')
    

    但是,解析一个字符串以创建另一个字符串然后由内置解析器再次解析的想法似乎效率低下。

    【讨论】:

      【解决方案2】:

      晚安!

      结合使用 Javascript 日期对象中的 UTC()toISOString() 方法会对您有所帮助。

      【讨论】:

      • 我相信这仍然会遇到我在编辑中描述的错误,特别是“定义后无法将新创建的日期转换为 UTC”,因为这会调整相对于新时区的时间,而不是相对于 UTC 定义时间(例如,东部标准时间下午 3:00 -> 格林威治标准时间上午 11:00,而不是格林威治标准时间下午 3:00 -> 东部标准时间 7:00)。
      • 也许JavaScript's Temporal API可以帮到你。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多