【问题标题】:MomentJS set timezone without changing timeMomentJS 设置时区而不更改时间
【发布时间】:2016-01-30 01:40:46
【问题描述】:

我正在尝试在 moment.js 中设置日期的时区而不更改时间值

我得到一个 UTC 日期:

date.toString() //Sun Sep 27 2015 00:00:00 GMT+0000

我需要在不更改时间的情况下设置时区。

Sun Sep 27 2015 00:00:00 GMT-0500

如果我使用date.utcOffset(moment().utcOffset()),它会添加偏移量:

date.toString() //Sat Sep 26 2015 19:00:00 GMT-0500

我可以的

date = moment(date.format("YYYYMMDDHHmmssSSSS"), "YYYYMMDDHHmmssSSSS")

但这似乎是一种低效的方法。

有没有什么方法可以只改变时区而不改变时间?

【问题讨论】:

    标签: javascript momentjs


    【解决方案1】:

    在撰写本文时(2.22 时刻),您可以使用 someLocalMomentVariable.utc(true) 从本地转到 UTC,然后使用 someUtcMomentVariable.local(true) 从 UTC 回到本地。

    【讨论】:

    • date.local(true) 似乎有效,但我找不到任何关于 .local() 接受哪些参数的文档
    • 在 v2.8.0 中看起来 .local(true)added
    • @TonyBrix 是的,不知道为什么它没有记录在案。
    【解决方案2】:

    如果您使用 moment.js,请使用带有 true 的 utcOffset 作为第二个参数 例如:date2 = moment(date1).utcOffset('+0400', true)

    如果您使用的是时刻-时区,您可以在第二个参数为 true 的时刻对象上使用 tz 函数 例如:date1 = moment(date1).tz('Asia/Kolkata', true)

    【讨论】:

    【解决方案3】:

    使用时刻时区,如果您可以识别时区,您也可以通过传递true 标志来设置它而无需调整时间

    const tz = "America/New_York"; //GMT-0500
    moment(date).tz(tz, true); //true flag identifies not changing time when updating time zone
    

    文档(虽然它没有解释布尔标志) https://momentjs.com/timezone/docs/#/using-timezones/converting-to-zone/

    【讨论】:

      【解决方案4】:

      moment().utcOffset(0).add(moment().utcOffset(), 'minutes').format()

      您必须进行某种数学运算,如果不进行分析,就无法说出哪种方法最有效。

      javascript 日期对象将始终具有本地时区,因此您需要在时刻对象中工作或进行补偿。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-13
        • 1970-01-01
        • 1970-01-01
        • 2011-02-21
        • 2019-01-02
        • 2013-05-24
        • 1970-01-01
        相关资源
        最近更新 更多