如何操作日期javascript_Date对象有哪些常用方法【教程】
发布时间 - 2026-01-30 00:00:00 点击率:次Date对象本质是带时区的时间戳快照,所有方法操作毫秒数;new Date('2025-10-01')因UTC解析致本地显示偏差,需用'2025-10-01T00:00:00'或new Date(2025,9,1)避免歧义。
JavaScript 的 Date 对象不是“操作日期的工具箱”,而是带时区的**时间戳快照**——所有方法本质都是对毫秒数的读写,理解这点才能避开多数坑。
为什么 new Date('2025-10-01') 在某些浏览器返回前一天?
因为 '2025-10-01' 被解析为 UTC 时间,再转成本地时区显示。中国用户看到 Sun Oct 01 2025 08:00:00 GMT+0800 是正常的,但如果你期望它代表“本地 10 月 1 日零点”,就得显式补全时间部分:
-
new Date('2025-10-01T00:00:00')—— 强制按本地时区解析(ISO 格式带 T) -
new Date(2025, 9, 1)—— 构造函数参数中月份是 0 起始,9才是十月 - 避免用
new Date('2025/10/01'):斜杠格式在 Safari 中可能被当作本地时间,Chrome 当 UTC,行为不一致
getMonth()、getDate() 和 getUTCDate() 到底该用哪个?
取决于你要表达的语义:
-
getDate()返回本地时区“今天几号”,比如 UTC 时间是 9 月 30 日 18:00,中国用户调用会得1(10 月 1 日) -
getUTCDate()返回 UTC 时间的“几号”,同一时刻永远返回30 -
getMonth()永远返回 0–11,别直接当月份用;显示时记得+1 - 跨时区计算(如“用户所在地区本月第几天”)必须用
getDate()系列;做服务器时间比对或日志归档用getUTCxxx()系列
setDate() 修改日期后,为什么小时变了?
因为 setDate() 只改“日”,其他字段(时分秒毫秒)保持不变。如果原时间是 new Date('2025-01-31T15:00:00'),执行 date.setDate(32) 后变成 2 月 1 日 15:00:00 —— 看似合理,但如果原时间是 2025-01-31T23:00:00,加一天会进到 2 月 1 日 23:00:00,但若你本意是“加 24 小时”,更安全的做法是:
-
date.setTime(date.getTime() + 24 * 60 * 60 * 1000)—— 显式加毫秒,不依赖日历逻辑 - 用
date.setDate(date.getDate() + 1)前先确认是否需要保留原始时分秒;否则建议用date.setHours(0, 0, 0, 0)归零再操作 - 注意:
setMonth()会自动处理天数溢出(比如 1 月 31 日设成 2 月 → 变成 3 月 3 日),这是隐式行为,容易误判
toJSON()、toISOString() 和 toString() 输出差异在哪?
三者都返回字符串,但语义和用途完全不同:
-
date.toJSON()等价于date.toISOString(),输出"2025-10-01T00:00:00.000Z",用于 API 通信或 JSON 序列化 -
date.toString()返回本地时区可读字符串,如"Sun Oct 01 2025 08:00:00 GMT+0800 (China Standard Time)",适合调试打印 -
date.toLocaleString()会根据系统语言和地区格式化,但结果不可控,不适合存储或传输 - 警惕:
JSON.stringify(new Date())内部会调用toJSON,所以序列化后是 ISO 字符串,不是 Date 对象
()
最常被忽略的是:所有 Date 方法都受本地时区影响,没有“绝对日期”这种东西;传给后端的时间,要么统一用 UTC 字符串(toISOString()),要么明确约定时区偏移(date.getTimezoneOffset() 返回分钟数,注意是反向的)。
# javascript
# java
# js
# json
# 浏览器
# 工具
# safari
# 后端
# 为什么
# chrome
# 构造函数
# date
# 字符串
# 对象
# 中国
# 的是
# 都是
# 几号
# 这是
# 如果你
# 序列化
# 才是
# 你要
# 几天
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在宝塔面板创建新站点?
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
图册素材网站设计制作软件,图册的导出方式有几种?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
如何在搬瓦工VPS快速搭建网站?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
jQuery validate插件功能与用法详解
长沙企业网站制作哪家好,长沙水业集团官方网站?
Linux网络带宽限制_tc配置实践解析【教程】
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
如何确保西部建站助手FTP传输的安全性?
如何在七牛云存储上搭建网站并设置自定义域名?
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
如何快速查询网站的真实建站时间?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
详解CentOS6.5 安装 MySQL5.1.71的方法
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
动图在线制作网站有哪些,滑动动图图集怎么做?
如何在腾讯云服务器快速搭建个人网站?
MySQL查询结果复制到新表的方法(更新、插入)
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
Laravel如何使用.env文件管理环境变量?(最佳实践)
网页设计与网站制作内容,怎样注册网站?
Laravel Fortify是什么,和Jetstream有什么关系
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
成都网站制作公司哪家好,四川省职工服务网是做什么用?
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
免费视频制作网站,更新又快又好的免费电影网站?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
使用C语言编写圣诞表白程序
如何在局域网内绑定自建网站域名?
微信公众帐号开发教程之图文消息全攻略
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
Laravel如何配置Horizon来管理队列?(安装和使用)
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环


