如何创建具有特定时间和特定时区(默认本地时区除外)的 moment JS 对象?

How to create a momentJS object with a specfic time and a specific timezone(other than the default local time zone)?

我将从前端收到一个字符串(带有时间和日期)。字符串格式是这个“2021-08-16T23:15:00.000Z”。我打算用输入字符串声明一个时刻对象,以及一个特定的时区(本地时区除外)。

    import moment from "moment";
    import "moment-timezone";



    // The input string I receive from the frontend.
    let strTime = "2021-08-16T23:15:00.000Z";

    console.log(strTime); //2021-08-16T23:15:00.000Z
    let time = moment.tz(strTime,  "YYYY-MM-DDTHH:mm:ss.SSSZ","America/Boise");

    console.log(time); // Moment<2021-08-16T17:15:00-06:00>, undesired value
    let UTCtime = moment.utc(time);
    console.log(UTCtime);

据我从 this 问题中了解到,console.log(time) 应该输出一个时间对象 23:15:00,但时区为“America/Boise”。

我打算 time 有相同的时间,即“23:15:00.000”,时区为“America/Boise”。 因此,当我稍后将该时间转换为 UTC 时,我需要获得正确的值 w.r.t 时区“America/Boise”,而不是我的本地时区。我该怎么做。

我想出了解决办法。

    const momenttz = require("moment-timezone");
    const moment = require("moment");
    
    // The input string I receive from the frontend.
    let strTime = "2021-08-16T23:15:00.000Z";
    console.log(strTime); //2021-08-16T23:15:00.000Z
    
    let time = moment.utc(strTime);
    time.tz("America/Boise", true);
    console.log(time.tz());
    
    console.log(time); // Moment<2021-08-16T23:15:00-06:00>, desired value
    
    let UTCtime = moment.utc(time);
    console.log(UTCtime); // Moment<2021-08-17T05:15:00Z>

在上面的代码中,在 console.log(time)time 的值为“23:15:00.000”,所需时区为“America/Boise”。这使您可以在稍后将其转换为 UTC 时获得正确的值。

这可以通过将可选的第二个参数传递给 moment-timezone.tz 变元作为 true 来实现,它仅更改时区(及其相应的偏移量),并且不影响时间值。

    time.tz(timezone, true);

上面的答案代码中给出了使用它的示例。

您可以在 Moment 时区文档

中阅读更多相关信息 here