monthdiff oracle_moment.js diff 计算相差浮点数月份时间存在问题

moment('2020-11-01',"YYYY-MM-DD").diff(moment('2020-10-01',"YYYY-MM-DD"), 'months',true).toFixed(4); // 1

moment('2020-10-31',"YYYY-MM-DD").diff(moment('2020-10-01',"YYYY-MM-DD"), 'months',true).toFixed(4); // 0.9677

moment('2020-10-30',"YYYY-MM-DD").diff(moment('2020-10-01',"YYYY-MM-DD"), 'months',true).toFixed(4); // 0.9667

moment('2020-10-29',"YYYY-MM-DD").diff(moment('2020-10-01',"YYYY-MM-DD"), 'months',true).toFixed(4); // 0.9333

moment('2020-10-02',"YYYY-MM-DD").diff(moment('2020-10-01',"YYYY-MM-DD"), 'months',true).toFixed(4); // 0.0333

从上面的结果来看计算部分存在问题,10月份总共31天,1天应该是 1/31 ≈ 0.0323,使用moment.js计算出来结果不符合,// moment.js 原装方法

function monthDiff (a, b) {

// difference in months

var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),

// b is in (anchor - 1 month, anchor + 1 month)

anchor = a.clone().add(wholeMonthDiff, 'months'),

anchor2, adjust;

if (b - anchor < 0) {

anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');

// linear across the month

adjust = (b - anchor) / (anchor - anchor2);

} else {

anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');

// linear across the month

adjust = (b - anchor) / (anchor2 - anchor);

}

//check for negative zero, return zero if negative zero

return -(wholeMonthDiff + adjust) || 0;

}

请问是如何进行调整方式实现正确的计算;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值