在 JavaScript 中获取当前时间戳是高频开发需求,根据精度和场景不同,主要有以下方法及最佳实践:
⏱️ 一、毫秒级时间戳(推荐)
适用于日志记录、性能监控、唯一ID生成等场景。
-
Date.now()(最简洁高效)
直接返回 UTC 时间 1970-01-01 至今的毫秒数,无需创建对象:const timestamp = Date.now(); // 示例:1724675745000优点:代码简洁、性能最优(无对象实例化)。
缺点:不兼容 IE8 及更早浏览器。 -
new Date().getTime()(兼容性强)
通过Date对象实例获取毫秒数:const timestamp = new Date().getTime(); // 等效于 new Date().valueOf()优点:全浏览器兼容,可同时获取其他时间信息(如年、月)。
缺点:需创建临时对象,性能略低。
⏱️ 二、秒级时间戳
适用于接口请求、缓存过期控制等无需毫秒精度的场景。
方法:将毫秒时间戳除以 1000 后取整:
const timestampInSeconds = Math.floor(Date.now() / 1000); // 示例:1724675745
注意:
- 使用
Math.floor()确保向下取整(非四舍五入)。 - 精度损失:毫秒部分被丢弃。
⚡ 三、高精度时间戳(微秒级)
适用于动画、性能分析等需要纳秒级测量的场景。
const microTimestamp = performance.now(); // 示例:12345.678(单位:毫秒,含小数)
特点:
- 精度达微秒级(小数后 5 位)。
- 返回相对时间(从页面加载开始计时),非绝对时间戳。
🔧 四、各方法对比与适用场景
| 方法 | 精度 | 性能 | 兼容性 | 适用场景 |
|---|---|---|---|---|
Date.now() | 毫秒 | ★★★ | 现代浏览器 | 通用日志、唯一ID生成 |
new Date().getTime() | 毫秒 | ★★ | 全浏览器 | 需兼容旧浏览器或获取其他时间信息 |
performance.now() | 微秒 | ★★★ | 现代浏览器 | 性能分析、动画帧计时 |
秒级转换(/1000) | 秒 | ★★★ | 全浏览器 | API 请求、缓存过期控制 |
🛠️ 五、实际应用示例
-
日志记录(毫秒级):
function logEvent(event) { console.log(`[${Date.now()}] ${event}`); // [1724675745000] 用户登录 } -
性能监控(高精度):
const start = performance.now(); // 执行代码 const duration = performance.now() - start; // 精确计算执行时间 -
生成唯一ID(时间戳 + 随机数):
const uniqueId = `id_${Date.now()}_${Math.random().toString(36).slice(2)}`; // id_1724675745000_abc123 -
缓存刷新控制(秒级):
const CACHE_TTL = 60; // 60秒缓存 if (Date.now() - cache.timestamp > CACHE_TTL * 1000) { refreshCache(); // 超时则更新缓存 }
⚠️ 六、注意事项
-
时区问题:
时间戳均为 UTC 时间,显示时需用toLocaleString()转换本地时间:new Date(timestamp).toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' }); -
精度选择:
- 常规需求用
Date.now()。 - 兼容旧浏览器用
new Date().getTime()。 - 避免使用
+new Date(隐式转换可读性差)。
- 常规需求用
-
第三方库:
复杂日期处理可用moment.js或day.js,但时间戳获取无需依赖库。
💎 总结建议
- 首选方案:
Date.now()(毫秒级)或Math.floor(Date.now() / 1000)(秒级)。 - 特殊场景:
- 兼容旧浏览器 →
new Date().getTime()。 - 高性能测量 →
performance.now()。
- 兼容旧浏览器 →
- 安全提示:时间戳可能被篡改,关键业务需结合服务端验证。
更详细的时区转换与格式化方法可参考:Vue JS时间戳获取、日期格式化指南。
JavaScript获取时间戳方法解析
1万+

被折叠的 条评论
为什么被折叠?



