JS获取当前时间戳 timestamp

JavaScript获取时间戳方法解析

JavaScript性能优化实战 10w+人浏览 409人参与

该文章已生成可运行项目,


在 JavaScript 中获取当前时间戳是高频开发需求,根据精度和场景不同,主要有以下方法及最佳实践:


⏱️ 一、毫秒级时间戳(推荐)

适用于日志记录、性能监控、唯一ID生成等场景。

  1. Date.now()(最简洁高效)
    直接返回 UTC 时间 1970-01-01 至今的毫秒数,无需创建对象:

    const timestamp = Date.now(); // 示例:1724675745000
    

    优点:代码简洁、性能最优(无对象实例化)。
    缺点:不兼容 IE8 及更早浏览器。

  2. 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 请求、缓存过期控制

🛠️ 五、实际应用示例

  1. 日志记录(毫秒级):

    function logEvent(event) {
      console.log(`[${Date.now()}] ${event}`); // [1724675745000] 用户登录
    }
    
  2. 性能监控(高精度):

    const start = performance.now();
    // 执行代码
    const duration = performance.now() - start; // 精确计算执行时间
    
  3. 生成唯一ID(时间戳 + 随机数):

    const uniqueId = `id_${Date.now()}_${Math.random().toString(36).slice(2)}`; // id_1724675745000_abc123
    
  4. 缓存刷新控制(秒级):

    const CACHE_TTL = 60; // 60秒缓存
    if (Date.now() - cache.timestamp > CACHE_TTL * 1000) {
      refreshCache(); // 超时则更新缓存
    }
    

⚠️ 六、注意事项

  1. 时区问题
    时间戳均为 UTC 时间,显示时需用 toLocaleString() 转换本地时间:

    new Date(timestamp).toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' });
    
  2. 精度选择

    • 常规需求用 Date.now()
    • 兼容旧浏览器用 new Date().getTime()
    • 避免使用 +new Date(隐式转换可读性差)。
  3. 第三方库
    复杂日期处理可用 moment.jsday.js,但时间戳获取无需依赖库。


💎 总结建议

  • 首选方案Date.now()(毫秒级)或 Math.floor(Date.now() / 1000)(秒级)。
  • 特殊场景
    • 兼容旧浏览器 → new Date().getTime()
    • 高性能测量 → performance.now()
  • 安全提示:时间戳可能被篡改,关键业务需结合服务端验证。

更详细的时区转换与格式化方法可参考:Vue JS时间戳获取、日期格式化指南

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_JinHao

感觉大佬那么帅还鼓励支持我~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值