确定两个特定日期时间之间的时间差是许多应用程序中的常见要求。本文提供了使用 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 的第三方插件:
var s = d.format("hh:mm:ss");
以上是如何使用 moment.js 准确计算两个日期时间之间的时差?的详细内容。更多信息请关注PHP中文网其他相关文章!