JavaScript如何实现日期计算_怎样获取两个日期之间的差值
发布时间 - 2025-12-29 00:00:00 点击率:次JavaScript中获取两日期差值的核心是转时间戳相减再换算:Date相减自动调用getTime()得毫秒差,除以对应系数可得天/小时/分钟;注意时区、闰年及月份天数不均,跨月跨年需手动逐级计算或用date-fns等库处理。
JavaScript 中获取两个日期之间的差值,核心是将日期转为时间戳(毫秒数),再做减法,最后按需换算成天、小时、分钟等单位。关键点在于注意时区、闰年、月份天数不均等细节,直接用 Date 对象相减即可得到毫秒差,无需第三方库。
用时间戳相减得到毫秒差
JavaScript 的 Date 对象在参与数值运算(如减法)时会自动调用 getTime(),返回自 1970-01-01 00:00:00 UTC 起的毫秒数:
- 创建两个
Date实例(支持字符串、时间戳、年月日参数等多种方式) - 用大日期减小日期,结果为正数毫秒值;若顺序反了,结果为负,可取绝对值
- 例如:
new Date('2025-05-20') - new Date('2025-05-10')返回864000000(10 天 × 24 × 60 × 60 × 1000)
换算成常用单位(天/小时/分钟)
毫秒值除以对应换算系数即可,注意使用 Math.floor 或 Math.round 控制精度:
- 天数:
Math.floor(diffMs / (1000 * 60 * 60 * 24)) - 小时数:
Math.
floor(diffMs / (1000 * 60 * 60)) - 分钟数:
Math.floor(diffMs / (1000 * 60)) - 注意:这种计算是「总跨度」,不是自然日历差(比如 2025-01-01 到 2025-01-02 总是 1 天,不考虑具体时分秒)
处理跨月/跨年或需要日历级差值(如“X年Y月Z日”)
纯毫秒法无法直接得出“几个月零几天”,因为月份天数不固定。此时需手动逐级计算:
- 先比较年份,累加整年天数(注意闰年)
- 再比较月份,按实际天数累加(可用
new Date(year, month+1, 0).getDate()获取当月天数) - 最后处理剩余天数
- 更稳妥的做法是使用成熟库如
date-fns的differenceInCalendarDays或differenceInMonths,避免自行实现的边界问题
注意事项和常见坑
实际开发中容易忽略以下几点:
- 日期字符串格式影响解析结果:
'2025-05-10'是 UTC 时间,而'2025/05/10'按本地时区解析,可能导致意外的 1 天偏差 - 不要用
getDay()(返回星期几)代替getDate()(返回当月第几天) - 避免直接比较
Date对象是否相等(==或===比较的是引用),应比时间戳:d1.getTime() === d2.getTime() - 如果只关心日期(忽略时分秒),建议统一设为当天 0 点:
date.setHours(0,0,0,0)
# javascript
# java
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
公司网站制作价格怎么算,公司办个官网需要多少钱?
如何用腾讯建站主机快速创建免费网站?
Windows Hello人脸识别突然无法使用
如何在建站宝盒中设置产品搜索功能?
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
jQuery中的100个技巧汇总
php json中文编码为null的解决办法
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
如何在建站主机中优化服务器配置?
iOS正则表达式验证手机号、邮箱、身份证号等
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
如何快速搭建高效香港服务器网站?
如何快速生成ASP一键建站模板并优化安全性?
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
中山网站推广排名,中山信息港登录入口?
如何用免费手机建站系统零基础打造专业网站?
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
如何用搬瓦工VPS快速搭建个人网站?
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
Java类加载基本过程详细介绍
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
微信h5制作网站有哪些,免费微信H5页面制作工具?
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
Swift中switch语句区间和元组模式匹配
如何登录建站主机?访问步骤全解析
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
网站制作大概多少钱一个,做一个平台网站大概多少钱?
如何确认建站备案号应放置的具体位置?
如何快速生成凡客建站的专业级图册?
大连网站制作公司哪家好一点,大连买房网站哪个好?
原生JS实现图片轮播切换效果
Java解压缩zip - 解压缩多个文件或文件夹实例
如何在七牛云存储上搭建网站并设置自定义域名?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层


floor(diffMs / (1000 * 60 * 60))