【问题标题】:JS - Converting time from local to UTC using timezone's not converting properlyJS - 使用时区将时间从本地转换为 UTC 未正确转换
【发布时间】:2022-07-06 21:55:58
【问题描述】:

您好,我有一个使用本地时区和日期将本地时间转换为 UTC 的函数:

this.conversion.dateTimeToTime('2022-07-04 12:30', 'America/Los_Angeles');

public dateTimeToTime(date, timezone = 'UTC') {
    date = new Date(date);
    return date.toLocaleTimeString('en-GB', {timeZone: timezone, hour12: false});
  }
}

这是 UTC 本地的 12:30,应该是 20:30(ish),但输出是 4:30utc 而不是倒退

我想知道我做错了什么

谢谢

【问题讨论】:

  • new Date('2022-07-04 12:30') 取决于您当地的时区。您需要使输入数据不依赖于此。我不是 JavaScript 日期函数的(非常复杂的)字符串解析逻辑方面的专家,但 new Date('2022-07-04T12:30:00Z') 似乎使用 UTC(至少在 Firefox 中)并且可能有更可靠的方法。

标签: javascript datetime


【解决方案1】:

将日期保留为简单的日期字符串(2022-01-31)会导致 JS 中的数据丢失并将其提供给 Date 构造函数可能会导致错误的日期。查看此SO question 了解更多信息。

通常我使用Date.toISOString 将我的日期转换为ISO format。接下来当我想将其解析为 JS Date 对象时,我使用 date-fnsparseISO 方法。

这是一个 CodeSandbox 示例:https://codesandbox.io/s/summer-bush-iv0h2g?file=/src/index.js

【讨论】:

    猜你喜欢
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 2019-03-09
    相关资源
    最近更新 更多