【问题标题】:not able to convert UTC to PST and vice versa无法将 UTC 转换为 PST,反之亦然
【发布时间】:2019-05-12 08:05:26
【问题描述】:

我正在使用momentjs#timezone lib 将UTC 转换为时区,反之亦然。

目前,面临一些转换问题。

她的密码是我的。

var myDate = "2019-05-11 18:22:40" //stored in DB utc format
myDate = timezone(myDate).tz("America/Los_Angeles").format("YYYY-MM-DD HH:mm:ss"); //converted in America/Los_Angeles Timezone
//output : myDate = "2019-05-11 05:52:40"

现在,想再次转换成UTC

myDate = timezone.tz(myDate, "America/Los_Angeles"); //added tz
myDate = timezone(myDate).tz("utc").format("YYYY-MM-DD HH:mm:ss");

但输出即将到来 "2019-05-11 12:52:40" 这与输入 "2019-05-11 18:22:40" 不同。

我在这里做错了吗?

【问题讨论】:

    标签: javascript timezone momentjs


    【解决方案1】:

    当您从字符串创建时刻并且未指定时区时,时刻假定它是本地时间。根据the moment docs

    moment(...) 是本地模式。假设输入不明确(无偏移) 为当地时间。明确输入(带偏移)调整为本地 时间。

    因此“2019-05-11 18:22:40”将被读取为本地时区的日期。

    您可以使用moment.utc("2019-05-11 18:22:40") 假设它是UTC。

    这意味着像这样更改您的代码:

    var myDate = "2019-05-11 18:22:40" //stored in DB utc format
    myDate = timezone.utc(myDate).tz("America/Los_Angeles").format("YYYY-MM-DD HH:mm:ss");
    

    但理想情况下,您的数据库应该使用 ISO-8601 standard 存储/返回日期以显示时间,以便清楚时区,即“2019-05-11T18:22:40Z”。 “Z”表示 UTC,因此如果您调用 moment("2019-05-11T18:22:40Z"),moment 会自动将其解析为 UTC。

    【讨论】:

    • 我更新了答案,使简单的解决方案更加清晰。更理想的解决方案意味着更改后端返回的内容
    • 你有没有尝试代码更改myDate = timezone.utc(myDate).tz("America/Los_Angeles").format("YYYY-MM-DD HH:mm:ss");
    猜你喜欢
    • 2016-09-20
    • 2021-10-03
    • 2010-12-03
    • 2011-10-08
    • 2013-03-15
    • 2019-09-19
    • 2013-12-29
    • 2011-09-22
    • 2012-05-14
    相关资源
    最近更新 更多