javascript如何操作日期和时间_Date对象怎么用【教程】
发布时间 - 2026-01-23 00:00:00 点击率:次JavaScript Date对象存在时区歧义、构造不一致、方法返回值不统一等问题:字符串解析默认按UTC处理导致本地显示偏差,月份索引从0开始易出错,加减日期应转毫秒计算而非直接修改,格式化推荐toISOString()而非toLocaleDateString()。
JavaScript 的 Date 对象不是“拿来就能算准”的工具,它默认基于本地时区、构造行为不一致、获取/设置方法容易混淆——直接用 new Date().getFullYear() 没问题,但一到跨时区、格式化、加减天数就出错。
为什么 new Date('2025-10-01') 在某些浏览器里变成 9 月 30 日?
因为字符串形式的日期(如 '2025-10-01')被解析为 UTC 时间,再转成本地时区显示。中国用户看到的 new Date('2025-10-01') 实际是 2025-09-30T16:00:00.000Z(UTC 时间),加上东八区偏移后显示为 9 月 30 日下午 4 点。
- 安全写法:用数字参数构造,
new Date(2025, 9, 1)(注意月份是 0 起始) - 若必须用字符串,加时间部分避免歧义:
new Date('2025-10-01T00:00') - Node.js 和 Chrome 较新版本对 ISO 字符串处理更统一,但 Safari 旧版仍可能出错
getMonth() 返回 0–11,但 getHours() 返回 0–23?
这是历史遗留设计:月份从 0 开始是为了和数组索引对齐(方便 ['Jan','Feb',...][date.getMonth()]),而小时/分钟/秒保持自然计数。混用时极易漏掉 +1。
-
date.getDate()→ 当月第几天(1–31)✅ -
date.getMonth()→ 0–11 ❗要 +1 才是“第几月” -
date.getFullYear()→ 推荐替代已废弃的getYear() - 想取“今天是星期几”?用
date.getDay()(0=周日,1=周一…)
如何可靠地加减 7 天、比较两个日期大小?
别用 setDate(date.getDate() + 7) 直接改原对象——它会受月份天数、闰年、夏令时影响,且修改了原始 Date 实例。
- 推荐转为毫秒计算:
new Date(date.getTime() + 7 * 24 * 60 * 60 * 1000) - 比较日期直接用
date1 > date2或date1.getTime() > date2.getTime()(前者隐式调用valueOf()) - 注意:两个
Date对象即使值相同,date1 === date2也是false(引用不同) - 避免用
toDateString()比较,它只含年月日,忽略时分秒
格式化输出时,toLocaleDateString 和 toISOString 哪个更可控?
toISOString() 总返回 UTC 时间的 ISO 8601 字符串(如 '2025-10-01T00:00:00.000Z'),稳定、可预测;toLocaleDateString() 依赖运行环境语言和地区设置,同一段代码在中文系统和英文系统输出不同。
- 需要固定格式(如 API 传参):优先用
toISOString().slice(0, 10)取日期部分 - 面向用户显示:用
toLocaleDateString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit' })显式指定 locale 和选项 - 不要依赖
toString()或toUTCString(),它们格式不标准、不易解析
真正麻烦的不是记方法名,而是时区转换、夏令时跳变、2 月 29 日边界这些隐性逻辑——哪怕只做「显示今天日期」,也要想清楚:这个“今天”是用户本地的,还是服务器所在时区的,还是 UTC 的。
# javascript
# java
# js
# node.js
# git
# node
# 浏览器
# 工具
# safari
# 格式化输出
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
再谈Python中的字符串与字符编码(推荐)
Laravel如何处理CORS跨域请求?(配置示例)
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
javascript基本数据类型及类型检测常用方法小结
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
高防服务器:AI智能防御DDoS攻击与数据安全保障
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
如何快速登录WAP自助建站平台?
如何在 React 中条件性地遍历数组并渲染元素
如何选择可靠的免备案建站服务器?
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
node.js报错:Cannot find module 'ejs'的解决办法
Laravel模型事件有哪些_Laravel Model Event生命周期详解
javascript日期怎么处理_如何格式化输出
Bootstrap整体框架之CSS12栅格系统
JS去除重复并统计数量的实现方法
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
如何彻底卸载建站之星软件?
如何在IIS7中新建站点?详细步骤解析
如何快速查询网址的建站时间与历史轨迹?
教你用AI将一段旋律扩展成一首完整的曲子
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
微信小程序 input输入框控件详解及实例(多种示例)
制作旅游网站html,怎样注册旅游网站?
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
canvas 画布在主流浏览器中的尺寸限制详细介绍
如何用AI帮你把自己的生活经历写成一个有趣的故事?
jQuery中的100个技巧汇总
Laravel如何使用Vite进行前端资源打包?(配置示例)
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
php485函数参数是什么意思_php485各参数详细说明【介绍】
简历在线制作网站免费版,如何创建个人简历?
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
长沙企业网站制作哪家好,长沙水业集团官方网站?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
创业网站制作流程,创业网站可靠吗?
晋江文学城电脑版官网 晋江文学城网页版直接进入
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
如何在阿里云服务器自主搭建网站?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?


