为啥我需要在 JavaScript 中将 unix 时间戳乘以 1000?

Posted

技术标签:

【中文标题】为啥我需要在 JavaScript 中将 unix 时间戳乘以 1000?【英文标题】:Why do I need to multiply unix timestamps by 1000 in JavaScript?为什么我需要在 JavaScript 中将 unix 时间戳乘以 1000? 【发布时间】:2011-06-08 06:03:22 【问题描述】:

我确信我必须为 javascript 中的每个 Unix 时间戳添加三个零以获取正确的日期是有原因的。你能告诉我为什么吗?自纪元以来的毫秒数与秒数一样简单吗?

【问题讨论】:

因为他们使用不同的计量单位? 谢谢大家。我知道这一定是合乎逻辑的。我的下一个问题是考虑到半不一致的情况,毫秒与秒之间的设计决策可能是什么。 您首先要否决有用的答案并接受最能解决您的问题的答案? 当然!在等待了大部分时间之后(你不能马上接受答案),我离开了我的电脑一小段时间。 最好的部分是,当我刚刚接受我的回答时,一些社区成员已经帮助我选择了:) 【参考方案1】:

因为 Javascript 内部使用毫秒,而普通的 UNIX 时间戳通常以秒为单位。

【讨论】:

乘法不应该丢失任何东西,即使是 Javascript 奇怪的 not-a-float-is-a-float Number 类型也应该能够做到这一点而不会出现舍入错误。另一方面,除法显然至少会丢失毫秒部分,这是常规 UNIX 时间戳无论如何都无法表达的。【参考方案2】:

Javascript 使用自纪元以来的毫秒数。 Unix 时间戳是自纪元以来的秒数。

因此,在 Javascript 中使用 Unix 时间戳之前需要将其转换为毫秒

【讨论】:

【参考方案3】:

Unix 时间是自纪元(1970 年 1 月 1 日)以来的秒数。在 Javascript 中,Date 对象期望自纪元以来的毫秒数,因此相差 1000 倍。

【讨论】:

以上是关于为啥我需要在 JavaScript 中将 unix 时间戳乘以 1000?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在Javascript中将一个对象分配给另一个变量也会改变初始对象[重复]

在javascript中将时间添加到日期对象

在javascript中将iso日期转换为毫秒

为啥我没有在 php 中将此数字作为整数

将普通日期转换为 unix 时间戳

为啥我需要在 Django 中将 kwargs 设置为 CBV 的参数