如何将 JS 日期从 UTC 'Z' 转换为时区日期

时间:2021-04-07 17:06:21

标签: javascript date datetime date-fns

嘿,我从数据库接收日期,该数据库将这些日期保存为 UTC。当我使用 console.log 打印日期之一时,它看起来像这样 CONFIG_CMDLINE

现在我想把它转换成 a1 时间。但不是作为字符串,我希望它作为 Javascript 日期。

我想做什么

我安装了 2021-04-07T07:00:00.000ZEurope/Berlin 并尝试使用这些包中的多个功能,但似乎没有任何功能正常工作或返回正确的日期,但再次使用“Z”后缀。

示例,其中 testDate 是前面提到的日期

date-fns

只有最后一种情况输出正确的日期,但格式仍然错误。我怎样才能在我的时区获得一个正常的日期。

1 个答案:

答案 0 :(得分:2)

<块引用>

现在我想把它转换成欧洲/柏林时间。但不是作为字符串,我希望它作为 Javascript 日期。

那是不可能的。 JavaScript Date 对象不包含任何时区信息。它包含的唯一内容是具有毫秒精度的 Unix timestamp。换句话说,Date 对象封装了自 1970-01-01 00:00:00.000 UTC 以来的毫秒数(不计算闰秒)。您可以直接使用 .getTime().valueOf() 或通过将 Date 对象转换为 Number 的任何机制来查看此值。

当观察 Date 对象并看到时区或特定时区中的值时,该行为是在运行时在函数本身中发生的。例如,toString 对象的 Date 函数在返回已格式化该结果的字符串之前将基于 UTC 的内部时间戳转换为计算机的本地时间时使用计算机的本地时区。

Date 对象上的大多数函数在 UTC 或计算机的本地时区(如所述)中工作。唯一适用于其他时区的是 toLocaleStringtoLocaleDateStringtoLocaleTimeString 函数,它们将接受 timeZone 选项中的 IANA 时区标识符。与 toString 函数一样,它们在生成字符串时仅使用这个时区。他们不保留它。

简而言之,Date 对象不包含时区,因此您要求的内容是不可能的。

其他几件事:

  • 不要直接在 console.log 对象上调用 Date。这种行为是未定义的。一些实现返回 toString 的值,而其他实现返回 toISOString 的值。

  • 除非您真的知道自己在做什么,否则永远不要尝试在日期/时间上添加/减去偏移量。在大多数情况下,您不是针对时区进行调整,而是实际上选择了不同的时间点。

  • 是的,ISO 8601 时间戳末尾的 Z 表示显示的日期和时间采用 UTC。

相关问题