代码之家  ›  专栏  ›  技术社区  ›  Brad Mathews

我有时间和时区——没有日期。如何将该时间转换为另一个时区?

  •  1
  • Brad Mathews  · 技术社区  · 3 年前

    从数据库中,我得到一个字符串形式的时间: 13:20:00 ,我得到一个时区: America/New_York 和一个日期作为字符串 2023-01-2 来自链接表

    如何将时间转换为美国/洛杉矶(会回来 10:20:00 )或者任何其他时区?

    我正在使用moment.js库。

    我试过:

    const t     = "2023-01-24 13:20:00"
    const tzOut = 'America/New_York'
    const tzIn  = "America/Los_Angeles"
    const m     = moment(t, "YYYY-MM-DD H:mm:SS").tz(tzIn)
    return m.tz(tzOut).format("YYYY-MM-DD H:mm:SS"); 
    // Returns "2023-01-24 16:20:00"
    

    这是有效的,但如果我改变周围的时区:

    const t     = "2023-01-24 13:20:00"
    const tzIn  = 'America/New_York'
    const tzOut = "America/Los_Angeles"
    const m     = moment(t, "YYYY-MM-DD H:mm:SS").tz(tzIn)
    return m.tz(tzOut).format("YYYY-MM-DD H:mm:SS"); 
    // Returns "2023-01-24 13:20:00", should be "2023-01-24 10:20:00"
    

    我相信这是因为我在美国/洛杉矶时区,moment.js考虑到了这一点 moment(t,"YYYY-MM-DD H:mm:SS").tz(tzIn) 将变为16:20:00。我希望它变成13:20:00,但在美国/纽约时区。

    所以我似乎走错了路——我应该怎么做?

    已编辑以添加日期。

    1 回复  |  直到 3 年前
        1
  •  2
  •   Michael M.    3 年前

    问题是你很困惑 moment.tz() .tz() 方法。如果需要分析特定时区中的日期,请使用 moment.tz() 像往常一样构造一个新的时刻对象,但有一个额外的参数,即时区。如果需要转换到其他时区,请使用 .tz() 方法

    在您的代码中,第一次需要使用 moment.tz() ,而第二次您需要使用 .tz() 方法将您的代码更改为:

    const t     = "2023-01-24 13:20:00"
    const tzIn  = 'America/New_York'
    const tzOut = "America/Los_Angeles"
    const m     = moment.tz(t, "YYYY-MM-DD H:mm:SS", tzIn)
    return m.tz(tzOut).format("YYYY-MM-DD H:mm:SS")