首页 > web前端 > js教程 > 如何使用 moment.js 准确计算两个日期时间之间的时差?

如何使用 moment.js 准确计算两个日期时间之间的时差?

DDD
发布: 2024-11-17 11:39:01
原创
379 人浏览过

How to Accurately Calculate the Time Difference Between Two Datetimes using moment.js?

获取日期时间之间的时差

确定两个特定日期时间之间的时间差是许多应用程序中的常见要求。本文提供了使用 moment.js 获取精确时间间隔、解决潜在问题并提供替代方法的综合指南。

问题陈述

给定两个表示为字符串的日期时间,目标是计算时间差并以 HH:MM:SS 格式显示。例如:

var now  = "04/09/2013 15:00:00";
var then = "04/09/2013 14:20:30";

//expected result:
"00:39:30"
登录后复制

初始尝试和问题

使用 moment.js 的 diff 函数,您可以尝试以下操作:

var now = moment("04/09/2013 15:00:00");
var then = moment("04/09/2013 14:20:30");

console.log(moment(moment.duration(now.diff(then))).format("hh:mm:ss"))
//outputs 10:39:30
登录后复制

但是,这种方法错误地添加了10 小时,尽管持续时间的内部值是准确的。

正确解决方案

要解决此问题,有两个选项:

选项 1(持续时间少于 24 小时):

moment.utc(moment(now,"DD/MM/YYYY HH:mm:ss").diff(moment(then,"DD/MM/YYYY HH:mm:ss"))).format("HH:mm:ss")
登录后复制

此方法将时差转换为 UTC,消除任何夏令时

选项 2(持续时间为 24 小时或更长):

var ms = moment(now,"DD/MM/YYYY HH:mm:ss").diff(moment(then,"DD/MM/YYYY HH:mm:ss"));
var d = moment.duration(ms);
var s = Math.floor(d.asHours()) + moment.utc(ms).format(":mm:ss");
登录后复制

此方法计算以毫秒为单位的时间差,将其转换为持续时间对象,并分别提取小时、分钟和秒。

替代方法: moment-duration-format

对于那些寻求格式化持续时间对象的便捷解决方案的人,可以使用名为 moment-duration-format 的第三方插件:

var s = d.format("hh:mm:ss");
登录后复制

以上是如何使用 moment.js 准确计算两个日期时间之间的时差?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板