【问题标题】:day.js is not converting UTC to local timeday.js 没有将 UTC 转换为本地时间
【发布时间】:2020-08-05 16:14:39
【问题描述】:

我在尝试将 momentjs 转换为 day.js 时遇到问题。

我立即通过moment.utc('2020-04-22T14:56:09.388842').local().format('MM/DD/YY h:mm A') 将UTC 转换为当地时间,返回04/22/20 9:56 AM

当我通过dayjs.utc('2020-04-22T14:56:09.388842').local().format('MM/DD/YY h:mm A') 使用day.js 进行转换时,我得到04/22/20 2:56 PM;我正在导入 utc 插件。

我在 jsfiddle 中放了一个例子:https://jsfiddle.net/obdg74sp/2/

有没有人遇到过这个问题,如果遇到过,您是如何解决的?

谢谢。

【问题讨论】:

    标签: javascript timezone momentjs utc dayjs


    【解决方案1】:

    Moment 和 Day.js 都只支持毫秒精度,但是当传入超过 3 个小数进行解析时,它们的行为会有所不同。

    • Moment 会忽略多余的小数,但仍会使用自己的解析逻辑
    • Day.js 恢复为 Date.parse 函数

    在后一种情况下,没有 UTC 感知,因此尽管通过 dayjs.utc 函数传递,但您会获得当地时间。

    这是在Day.js issue #544 提出的,并由该图书馆的所有者关闭,没有任何更改。

    您可以通过修剪字符串以截断多余的小数来解决此问题。

    dayjs.utc('2020-04-22T14:56:09.388842'.substring(0, 23))
    

    然后它将正确解析 UTC,并且您的其余逻辑将相应地工作。

    (或者,您可以将Z 附加到字符串)

    【讨论】:

      【解决方案2】:

      我用过:

      dayjs(date).utc('z').local().tz(ianaCode).format('ddd, MMM D, H:mm z')

      例子:

      dayjs('2021-06-08T24:00:00').utc('z').local().tz('America/Detroit').format('ddd, MMM D, H:mm z')

      【讨论】:

        猜你喜欢
        • 2017-12-09
        • 1970-01-01
        • 2012-11-01
        • 2018-07-27
        • 2011-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多