为何JavaScript中new Date(1680907460.)返回零纪元而Date()正常?
问题解答
这不是语法疏漏,是Date作为普通函数和构造函数调用时的行为差异,再加上时间戳单位的问题导致的:
- 当你直接执行
dt = Date(1680907460.)时,Date是作为普通函数被调用的——不管你传什么参数,它都会直接返回当前本地时间的字符串,和你传入的时间戳完全无关。你看到的4月17日其实是执行这段代码时的当前时间。 - 当你执行
dt = new Date(1680907460.)时,Date是作为构造函数被调用的:传入的数字会被当作毫秒级时间戳(从1970-01-01 00:00:00 UTC开始计算的毫秒数)。你给的1680907460是秒级时间戳,直接传入的话,相当于只过了约19.45天,所以得到的日期是1970年1月下旬(你说的“零纪元”应该是表述偏差)。
要让构造函数返回正确的4月17日时间,需要把秒级时间戳转成毫秒:
dt = new Date(1680907460. * 1000)
内容的提问来源于stack exchange,提问作者Tunneller
相关产品推荐
相关产品推荐

