当前位置: 首页 > news >正文

Web前端之JavaScript时间体系全解析、performance、Date、now

MENU

  • Date 对象体系
  • Date.now()
  • performance.now()
  • new Date()
  • 其它常见时间相关API
    • Intl.DateTimeFormat
    • setTimeout / setInterval
    • requestAnimationFrame
  • 三者核心对比


Date 对象体系

Date是JavaScript最早期提供的时间API(ES1就有),主要和真实世界的时间打交道。


创建时间

// 当前时间
new Date();
// 指定年月日时分秒(注意月份从0开始)
new Date(2025, 7, 23, 22, 30);
// ISO 8601格式
new Date("2025-08-23T22:30:00Z");
// 传入时间戳(ms)
new Date(1724431500000);

获取时间戳

// 当前时间戳(ms,整数)
Date.now();
// 等价于 Date.now()
+new Date();
// 同样效果
new Date().getTime();

🔹 基准点:1970-01-01 00:00:00 UTC(Unix Epoch)。
🔹 精度:毫秒(整数)。
🔹 缺点:受系统时间修改影响,比如用户把电脑时间调快/慢。


获取时间字段

let d = new Date();d.getFullYear();
d.getMonth();
d.getDate();
d.getHours();
d.getMinutes();
d.getSeconds();
d.getMilliseconds();
d.getDay();

还有对应的UTC版本(getUTCFullYear()等)。


设置时间字段

d.setFullYear(2030);
d.setMonth(11);
d.setDate(31);
d.setHours(23, 59, 59, 999);

Date.now()

1、返回一个当前时间戳(毫秒整数)
2、适合:
2.1、存数据库
2.2、日志记录
2.3、时间差计算(但精度不高)

let start = Date.now();
// do something
let end = Date.now();console.log(`耗时: ${end - start}ms`);

问题:受系统时间修改影响,用户改了电脑时钟就会跳。


performance.now()

这是 高精度时间API,在HTML5 Performance API中引入。
特点:
1、返回一个 浮点数(毫秒,小数点后三位以上,微秒级精度)
2、基准点是performance.timeOrigin(通常是页面导航/加载的起点)
3、不受系统时间修改影响

let t0 = performance.now();
// do something
let t1 = performance.now();console.log(`精确耗时: ${t1 - t0}ms`);

用途:
精确测量代码执行时间
动画帧时间戳
Web性能分析


new Date()

返回一个Date对象,可以格式化、转换、运算。
既能用作时间戳(getTime()),也能当字符串(toISOString())。

let now = new Date();// 2025-08-23T15:00:00.000Z
console.log(now.toISOString());
// 本地化时间
console.log(now.toLocaleString());

其它常见时间相关API

Intl.DateTimeFormat

用于本地化时间格式化

new Intl.DateTimeFormat('zh-CN', { dateStyle: 'full', timeStyle: 'long' 
}).format(new Date());
// "2025年8月23日星期六 中国标准时间 下午11:30:00"

setTimeout / setInterval

基于系统时间调度,延迟/周期执行。
但不保证精确(可能被浏览器限流或阻塞)。

setTimeout(() => console.log("延迟执行"), 1000);

requestAnimationFrame

和屏幕刷新率同步的计时器,适合动画

function loop(ts) { // ts = performance.now()console.log(ts);requestAnimationFrame(loop);
}
requestAnimationFrame(loop);

三者核心对比

对比

API返回值基准点精度是否受系统时间影响用途
Date.now()毫秒整数1970-01-01 UTC毫秒✅ 会时间戳、日志
performance.now()毫秒浮点页面加载时刻微秒级❌ 不会性能测量、动画
new Date()Date对象1970-01-01 UTC毫秒✅ 会时间运算、显示

总结选用策略
需要“绝对时间”(日志、存储、显示):
👉 Date.now()或new Date()


需要“相对时间/精确间隔”(性能测试、动画):
👉 performance.now()


需要完整日期对象(格式化、运算):
👉 new Date()

http://www.dtcms.com/a/354162.html

相关文章:

  • Go语言循环性能终极对决:for vs range 深度剖析
  • 如何用Postman做接口测试?
  • k8s中的服务(Service),详细列举
  • JavaSE:类和对象2
  • Redis集群介绍——主从、哨兵、集群
  • 单兵图传设备如何接入指挥中心平台?国标GB/T28181协议的20位ID有何含义?如何进行配置?
  • [手写系列]Go手写db — — 第二版
  • spring-boot-test与 spring-boot-starter-test 区别
  • 前端架构设计模式与AI驱动的智能化演进
  • 嵌入式学习日志————USART串口协议
  • 【开发便利】让远程Linux服务器能够访问内网git仓库
  • 目标检测基础
  • [系统架构设计师]论文(二十三)
  • 控制系统仿真之时域分析(二)
  • 计算机组成原理(13) 第二章 - DRAM SRAM SDRAM ROM
  • 通信原理(005)——带宽、宽带、传输速率、流量
  • 农业物联网:科技赋能现代农业新篇章
  • uC/OS-III 队列相关接口
  • Linux 命令浏览文件内容
  • 机器视觉的车载触摸屏玻璃盖板贴合应用
  • 【Bluetooth】【调试工具篇】第九章 实时抓取工具 btsnoop
  • [vcpkg] Windows入门使用介绍
  • 致远OA新闻公告讨论调查信息查询SQL
  • 模拟电路中什么时候适合使用电流传递信号,什么时候合适使用电压传递信号
  • 世界的接口:数学、心智与未知的协作
  • 【前端】jsmpeg 介绍及使用
  • Libvio 访问异常排查指南:从现象到根源的深度剖析
  • 专项智能练习(关系数据库)
  • 风锐统计——让数据像风一样自由!(九)——回归分析
  • FreeRTOS内部机制理解(任务调度机制)(三)