Moment.js使用问题:如何对两个moment.preciseDiff的时间差结果求和
两个moment.preciseDiff时间差累加实现方案
moment.preciseDiff 方法默认返回人类可读的差值字符串(如2个月3天),无法直接进行计算,需要按以下方案实现累加:
方案1:基准时间叠加法(推荐,自动处理年月进位、闰年等特殊逻辑)
步骤1:修改差值获取逻辑,拿到结构化差值对象
调用preciseDiff时传入第三个参数true,即可得到包含years/months/days/hours/minutes/seconds字段的结构化差值对象:
var bDt = moment(data.startDate, "M/DD/YYYY"); var eDt = moment(data.endDate, "M/DD/YYYY"); var dtDiff = moment.preciseDiff(bDt, eDt, true); // 第三个参数传true返回对象 var bDt2 = moment(data.startDate2, "M/DD/YYYY"); var eDt2 = moment(data.endDate2, "M/DD/YYYY"); var dtDiff2 = moment.preciseDiff(bDt2, eDt2, true);
步骤2:叠加差值计算总时长
选任意固定时间作为基准,依次叠加两个差值后,再计算基准时间和最终时间的差值即可:
// 取任意固定时间作为基准即可 const baseMoment = moment('2000-01-01'); // 依次叠加两个时间差 const resultMoment = baseMoment.clone().add(dtDiff).add(dtDiff2); // 得到最终累加结果,需要字符串格式就不传第三个参数,需要结构化对象就传true const totalDiffStr = moment.preciseDiff(baseMoment, resultMoment); const totalDiffObj = moment.preciseDiff(baseMoment, resultMoment, true);
方案2:毫秒累加(适合短时间差场景)
如果你的时间差都在天以内,不需要考虑年月的天数差异,可以直接转毫秒求和:
// 直接计算两个时间段的毫秒差 const diffMs1 = eDt.diff(bDt); const diffMs2 = eDt2.diff(bDt2); // 求和后转preciseDiff格式 const totalDiff = moment.preciseDiff(0, diffMs1 + diffMs2);
内容的提问来源于stack exchange,提问作者Elvin
相关产品推荐
相关产品推荐

