gpt4 book ai didi

javascript - new Date() 返回相对时间而不是 UTC 时间

转载 作者:行者123 更新时间:2023-11-30 14:52:48 25 4
gpt4 key购买 nike

当我转到我的浏览器开发工具并在控制台中编写 new Date() 时,它会给我以下内容

Mon Dec 18 2017 17:11:29 GMT+0200

我认为它应该返回 UTC 时间。

问题是我在 AWS 上有一个服务器,它将 UTC 时间写入数据库。它将它写成一个字符串,在客户端我执行以下操作

const updatedMilliAgo = new Date() - new Date(timeStrFromDb);

由于某种原因,差异是两个小时,即使我在写入服务器后立即检查它也是如此。

我在这里做错了什么?

最佳答案

当您使用 new Date() 时,您是在使用代码正在执行的系统时钟的当前值构造一个 Date 对象。 Date 对象在内部存储 自 1970-01-01T00:00:00Z 以来的毫秒数(不考虑闰秒)。换句话说,Date 对象始终表示 UTC 时间。

但是,Date 对象中有许多函数和参数在本地时间 起作用。例如,当您在 Date 对象上调用 .toString() 时,计算机的本地时区将应用于内部基于 UTC 的值,以便生成字符串反射(reflect)本地时间。

console.log 的情况下 - 不能直接记录像 Date 这样的标准对象。相反,大多数实现将记录一个字符串值。该值的创建方式完全是特定于实现的,由 ECMAScript 规范定义。许多实现将返回与 .toString() 返回的相同的基于本地时间的值。某些(例如 FireFox)将返回与 .toISOString() 返回的相同的基于 UTC 的值。实现返回存储的实际毫秒数 (.valueOf()) 或其他一些表示形式是合理的。如果您需要一致性,请不要只记录 Date 对象。相反,记录其中一个返回字符串或数字的函数的输出。

您还询问了减去两个日期对象的问题。这将在每个对象上隐式调用 .valueOf(),减去它们基于 UTC 的内部值并为您提供它们之间的毫秒数。您遇到的最有可能的问题是如何构造第二个 Date 对象。您没有给出 timeStrFromDb 的组成示例,但了解该字符串的格式直接关系到 Date 对象的构造方式。如果您没有使用标准化格式,或者不清楚该值是基于 UTC 还是基于 UTC 的特定偏移量,则您的字符串的解析方式可能与您预期的不同。

关于javascript - new Date() 返回相对时间而不是 UTC 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47871382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com