最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
怎样获取当前时间?
时间:2026-06-27 09:45:51 编辑:袖梨 来源:一聚教程网
new Date() 返回本地时区的当前时间对象,非字符串或时间戳;需调用 getXXX() 方法获取年月日等,toISOString() 得 ISO 字符串,toLocaleString() 等适配系统格式;实时更新用 setInterval() 并清理,关键逻辑须校准服务端时间。
用 new Date() 获取当前时间对象最直接
JavaScript 的 Date 构造函数不传参时,默认返回本地时区的当前时间戳对应的时间对象。这是所有后续格式化操作的基础,不是字符串也不是时间戳数字,而是一个可调用方法的对象。
常见错误是以为 new Date() 直接返回字符串,结果在拼接或比较时出错;也有人误用 Date.now()(它只返回毫秒数,没提供年月日等方法)。
- 需要年、月、日、时、分、秒 → 调用
getFullYear()、getMonth()、getDate()等方法 - 需要 ISO 格式字符串(如
"2024-05-22T14:30:45.123Z")→ 用toISOString() - 需要本地格式字符串(含时区)→ 用
toLocaleString(),注意不同系统/语言环境输出不同
toLocaleTimeString() 和 toLocaleDateString() 控制显示粒度
这两个方法比手动拼接更可靠,能自动适配用户操作系统设置的语言和格式习惯。比如中文 Windows 默认显示“2024年5月22日”,而英文 macOS 显示 “May 22, 2024”。
容易踩的坑是忽略 options 参数:不传参时行为不可控;传空对象又可能触发默认 locale 的意外 fallback。
立即学习“前端免费学习笔记(深入)”;
- 只要时间(不含日期)→
toLocaleTimeString('zh-CN', { hour12: false }) - 只要日期(不含时间)→
toLocaleDateString('en-US', { year: 'numeric', month: '2-digit', day: '2-digit' }) - 想固定为 24 小时制且带秒 → 必须显式写
hour12: false和second: '2-digit'
页面实时更新时间要用 setInterval(),但别用 setTimeout 递归模拟
每秒刷新一次显示,本质是定时读取并重写 DOM 内容。用 setInterval() 更简洁安全;用 setTimeout 递归虽然可行,但容易因执行延迟导致时间跳变或堆积。
性能影响很小,但要注意:频繁操作 DOM(尤其用 innerHTML)可能触发重排。如果只是更新一个 <span id="clock"></span>,直接改 textContent 就够了。
- 启动定时器:
const timer = setInterval(() => { clockEl.textContent = new Date().toLocaleTimeString(); }, 1000); - 页面卸载前记得清除:
window.addEventListener('beforeunload', () => clearInterval(timer)); - 不要在循环里反复创建
new Date()对象再调方法——这没问题,开销可忽略;真正慢的是 DOM 写入
服务端时间不准?别依赖 new Date() 做逻辑判断
浏览器时间由用户设备决定,可能被手动修改、时区错设、系统休眠后未同步。如果你要做倒计时、权限过期、订单超时这类关键逻辑,new Date() 只能用于展示,不能用于计算是否过期。
真实场景中,必须和服务端时间对齐。常见做法是首次加载时请求一个 /api/time 接口,返回服务器当前 UNIX 时间戳(秒或毫秒),之后用这个基准 + 客户端经过的毫秒数来估算服务端当前时刻。
这个差值(client-server skew)通常几秒内,但跨设备、跨网络可能达分钟级。忽略它,就可能出现“用户看到时间还没到,但提交已提示过期”的问题。
相关文章
- 星砂岛亚历克斯怎么送礼 07-10
- 头号禁区新手如何玩 07-10
- agentictaskx/ppt-to-course 下载与安装入口 07-10
- 龙胤立志传失传秘籍有哪些奇遇特点 07-10
- sunbigfly/ppt-agent-skills README:用状态机和 Gate 生成可预览、可导出的 PPTX 07-10
- 爱奇艺如何进行多账号登录与切换设置 07-10