day.js 未将 UTC 时间转换为本地时间

day.js is not converting UTC to local time

我 运行 遇到了一个问题,试图将 momentjs 转换为 day.js

瞬间,我通过 moment.utc('2020-04-22T14:56:09.388842').local().format('MM/DD/YY h:mm A') returns 04/22/20 9:56 AM.

将 utc 转换为本地时间

当我通过 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/

有没有人运行遇到过这个问题,如果遇到过,你们是如何解决的?

谢谢。

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 附加到字符串)

我用过:

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')