【问题标题】:Converting UTC string date to a UTC date将 UTC 字符串日期转换为 UTC 日期
【发布时间】:2021-04-19 17:11:09
【问题描述】:

我从我的 api 收到以下日期字符串(作为 UTC):"2020-04-01T00:00:00Z" 这很好。

然后我将此字符串转换为 Date 对象,如下所示:let formattedstartDate: Date = new Date(data.body.startDate);

我现在在英国,所以这显示为:Wed Apr 01 2020 01:00:00 GMT+0100 (British Summer Time) 但是对于我在美国的用户,这显示为:Tue Mar 31 2020 19:00:00 GMT-0500 (America New_York Standard Time) 因为这当然是由于他们的本地浏览器转换为不同的时区,但是我想为所有用户保留 GMT/UTC 时间,无论他们身在何处。

我希望世界上的每个人都将其视为:Wed Apr 01 2020 01:00:00 GMT+0100 (British Summer Time)

所以我使用以下方法手动转换回 GMT/UTC:

let convertToUtcDate = new Date(formattedstartDate.getUTCFullYear(), formattedstartDate.getUTCMonth(), formattedstartDate.getUTCDate(),  formattedstartDate.getUTCHours(), formattedstartDate.getUTCMinutes(), formattedstartDate.getUTCSeconds());

但是美国的用户仍然认为这是Tue Mar 31 2020 19:00:00 GMT-0500 (America New_York Standard Time) 任何关于为什么的想法?

【问题讨论】:

    标签: javascript momentjs moment-timezone


    【解决方案1】:

    您可以尝试从您在英国的服务器获取日期,然后将日期转换为字符串let StringDate = dateObjectInUk.toString(),并将该字符串打印在屏幕上供您的美国用户使用。

    【讨论】:

    • 感谢您的回答。我遇到的问题是我的日历要求它是 Date 类型,所以不幸的是,我不能仅仅拥有一个字符串:(
    • 这不是解决方案,而是对原始输出的破解。
    • 如果您的日历需要Date,我想除了以某种方式调整您的日历库以在显示值时显式使用英国 TZ 之外,没有其他解决方法; AFAIK Date 只保存 UTC 时间戳并将其传递到它初始化的任何 TZ 中(最终恰好是用户自己的浏览器/区域设置 TZ)。也许还在原始问题中提及您的日历库,以便提出任何可能的替代方案?
    猜你喜欢
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 2018-05-22
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    相关资源
    最近更新 更多