javascript - 如何在不更改内容的情况下更改日期的时区?
问题描述
我们正在与另一家建造背面的公司合作,他们正在以这种格式保存日期:
“2020-12-12T12:00:00.0000Z”
问题是,当我们创建一个传递该日期的 Date 对象时,它会增加 2 小时(就像我们在 GMT+2 中一样),所以当我们尝试与当前日期进行比较时,它永远不会相同。
所以我们需要将该日期转换为 GMT+2 以便我们可以比较日期,但不修改它最初显示的日期。
解决方案
...它增加了2个小时...
不,它没有。它为您提供了一个Date
表示字符串定义的时间。该字符串具有Z
后缀,表示它以 GMT/UTC 表示。如果你解析它,结果是一个Date
代表那个时刻的对象。在您的时区中,时区敏感函数 ( getHours
, getMinutes
, toString
) 将使用您的时区来提供适当的值。UTC 函数 ( getUTCHours
, getUTCMinutes
, toUTCString
) 将使用 UTC (GMT)。
如果后端向您发送该字符串并且它并不意味着是 UTC,那么后端向您发送了一个不正确的字符串。
如果您想忽略字符串上的时区指示符并将其解析为本地时间,最好的办法是将其分解为多个部分并使用new Date(year, month, day)
构造函数。但是,您也可以只删除Z
,因为规范说没有时区指示符的日期/时间形式是在本地时间解析的(而仅日期是 UTC)。不过,规范对此有所改动,这就是为什么我建议改用new Date(year, month, day)
构造函数。
推荐阅读
- python-3.x - SyntaxError: 关键字不能是表达式,这是意外错误吗?
- java - 如何将 unix 纪元微秒转换为 Java 时间戳
- javascript - 使用 Crypto-JS 在 Javascript/Typescript 中理解位长度和字符串位的问题
- c - 部分宏重定义
- python - 如何在 python 中使用 Yobit API 获取余额和下订单
- c# - 具有分组依据和多个计数的 LINQ 查询
- r - 在 RStudio 中编织到 powerpoint 时删除作者和字幕之间的空格
- html - 悬停效果,覆盖从一个角落开始,慢慢地到达另一个角落
- visual-c++ - BranchCallback 中的 getNodeID() 是什么
- linux - Pivotal Cloud Foundry 中的 Worker 应用程序和 Tasks 之间的差异以及调用 linux 应用程序