首页 > 解决方案 > 如何在不更改内容的情况下更改日期的时区?

问题描述

我们正在与另一家建造背面的公司合作,他们正在以这种格式保存日期:

“2020-12-12T12:00:00.0000Z”

问题是,当我们创建一个传递该日期的 Date 对象时,它会增加 2 小时(就像我们在 GMT+2 中一样),所以当我们尝试与当前日期进行比较时,它永远不会相同。

所以我们需要将该日期转换为 GMT+2 以便我们可以比较日期,但不修改它最初显示的日期。

标签: javascriptangulartypescript

解决方案


...它增加了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)构造函数。


推荐阅读