嘿,我从数据库接收日期,该数据库将这些日期保存为 UTC。当我使用 console.log 打印日期之一时,它看起来像这样 CONFIG_CMDLINE
。
现在我想把它转换成 a1
时间。但不是作为字符串,我希望它作为 Javascript 日期。
我想做什么
我安装了 2021-04-07T07:00:00.000Z
和 Europe/Berlin
并尝试使用这些包中的多个功能,但似乎没有任何功能正常工作或返回正确的日期,但再次使用“Z”后缀。
示例,其中 testDate 是前面提到的日期
date-fns
只有最后一种情况输出正确的日期,但格式仍然错误。我怎样才能在我的时区获得一个正常的日期。
答案 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 或计算机的本地时区(如所述)中工作。唯一适用于其他时区的是 toLocaleString
、toLocaleDateString
和 toLocaleTimeString
函数,它们将接受 timeZone
选项中的 IANA 时区标识符。与 toString
函数一样,它们在生成字符串时仅使用这个时区。他们不保留它。
简而言之,Date
对象不包含时区,因此您要求的内容是不可能的。
其他几件事:
不要直接在 console.log
对象上调用 Date
。这种行为是未定义的。一些实现返回 toString
的值,而其他实现返回 toISOString
的值。
除非您真的知道自己在做什么,否则永远不要尝试在日期/时间上添加/减去偏移量。在大多数情况下,您不是针对时区进行调整,而是实际上选择了不同的时间点。
是的,ISO 8601 时间戳末尾的 Z
表示显示的日期和时间采用 UTC。