js getTime获取时间戳

2026-05-13 13:00:21 1037阅读 0评论

JavaScript 里的 getTime(),你真的用对了吗?

当你打开浏览器控制台,准备调试一个列表排序功能时,发现发布时间靠前的文章反而排在后面。反复检查数据源和代码逻辑都没问题,最后定位到的原因往往简单得让人想拍大腿:时间戳单位不统一。

在 JavaScript 里处理时间,Date.getTime() 是绕不开的方法。它的作用是返回从 1970 年 1 月 1 日 00:00:00(协调世界时)到现在所经历的毫秒数。这个数字看起来有点抽象,但它的好处在于是一个纯粹的整数,拿来做计算、排序比解析日期字符串要稳得多。

很多开发者容易在这里踩坑。默认情况下,前端拿到的是毫秒级时间戳,比如 1700000000000。而大部分后端服务(如 Java、Go 或 Python)存储或返回的通常是秒级时间戳,即 1700000000。如果直接把后端的数字当成前端的时间戳来算,结果会相差 1000 倍,导致所有基于时间的业务逻辑全部崩盘。

遇到这种情况,别急着改后端接口,在前端做兼容更常见。把后端传来的秒级时间戳转换为毫秒,只需要乘以 1000;反过来,如果你需要把前端的毫秒戳传给后端,记得取整。推荐的做法是使用 Math.floor() 或位运算去除小数点,例如 (timestamp / 1000) | 0,这样能避免浮点数精度带来的显示异常。

说到生成当前时间戳,其实有个更简洁的写法。除了 new Date().getTime(),你可以直接使用 Date.now()。两者在功能上几乎一样,但后者代码更少,可读性更强。不过要注意,如果是为了兼容性或者为了构造某个特定历史时刻的时间对象,还是得用 new Date() 实例化。

拿到两个时间戳,最实用的场景莫过于计算“过去了多久”。比如做一个倒计时,或者统计用户在线时长。假设你有开始时间和结束时间,直接用结束时间戳减去开始时间戳,得到的差值就是毫秒数。

const diff = endTime - startTime; 
const minutes = Math.floor(diff / 1000 / 60);

通过简单的除法换算,你就能轻松得到相差的分钟、小时或天数。相比去拆解日期对象的年月日时分秒,这种数值减法不仅性能更好,而且不用考虑闰年、大小月这些麻烦事。特别是在做排行榜排序时,直接比较数字大小的开销远小于字符串比对,在高并发场景下这点差异会被放大。

还有一点常被忽略:getTime() 返回的是基于 UTC 的时间。这意味着无论用户的本地时区是纽约还是北京,这个数值都是一样的。这非常适合用来做全局性的状态判断。如果你需要根据这个戳转换成用户本地可读时间,再调用 toLocaleString() 即可。这样做既保证了底层数据的纯粹性,又兼顾了前端展示的多语言适配。

写到这里,核心思路其实很清晰:底层数据用统一的数值(毫秒戳)流通,仅在最终渲染给用户看的时候再进行格式化。这样能最大程度减少因时区、格式错误导致的 Bug。下次再碰到时间相关的问题,先确认好单位是秒还是毫秒,大概率能省下一半的排查时间。技术实现没有捷径,但在细节处保持敏感度,能让你的代码运行得更稳健。

文章版权声明:除非注明,否则均为Dark零点博客原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
验证码
评论列表 (暂无评论,1037人围观)

还没有评论,来说两句吧...

目录[+]