【发布时间】:2020-12-25 01:48:20
【问题描述】:
为了管理我使用 React native 开发的移动应用程序的不同时区日期,我的 API 存储在数据库中并以 UTC 格式返回日期,如下所示:2020-09-06T11:07:12.647084Z
我以为我有一个特定的程序要做,通过 React Native Localize 包和 rnlocalize.getTimeZone() 方法将手机的时区发送给 API,以便 API 可以轻松处理日期,但我意识到只需将日期传递给原生 Javascript 中 Date 对象的 parse 方法中的 UTC 格式,以一种神奇的方式完全处理了不同的时区。
所以,由于我不喜欢魔法,所以我想知道 Javascript 如何检测手机的时区以及以下代码在内部实际上是如何工作的:
Date.parse("2020-09-06T11:07:12.647084Z")
使用此代码,如果我将手机时区更改为 America/New_York 或 Europe/Brussel,则日期每次都有效,并且对于创建的同一主题,无论时区如何,它都会告诉我“4 分钟前” .
如果 Javascript 管理时区,那么使用 React Native Localize 有什么意义,更重要的是,哪个更可靠?
【问题讨论】:
-
UTC 不是一种格式,它是一种时间标准。 “2020-09-06T11:07:12.647084Z”是 ISO 8601 格式。虽然 ECMA-262 确实支持 very similar format,但不支持小数秒中的额外 3 位数字,因此解析取决于实现。
-
"2020-09-06T11:07:12.647084Z" 代表 UTC 时间的特定时刻,因此无论设备的时区如何,它始终是同一时间之前以及您的行为重新看到是预期的。也就是说,如果对于纽约的用户来说是 4 分钟前,那么对于世界各地的每个人来说也是 4 分钟前(这就是使用 UTC 的意义,它是一个通用时间标准)。但是,如果您要显示当地时间,那么对于具有不同偏移量的时区,会有所不同。
-
感谢您的回答!然而,我忘记了一个很大的细节,当我说它显示在“4 分钟前”的屏幕上时,那是因为那是我需要显示的。另一方面,如果我记录我正在处理的日期以显示“4 分钟前”,那么实际上是已更改的日期。我还不如直接打印当地日期,它会显示纽约的 2020-09-06 07:00 和布鲁塞尔的 2020-09-06 13:00,实际上这部分看起来“神奇”我。
-
感谢有关 UTC 的精确性,看到我一直放弃“UTC 格式”这个词一定很有趣 :)
标签: javascript react-native date datetime timezone