如下所示,moment.diff()
错误地计算了昨天(10月31日)和今天(11月1日)之间的0
天数。这是momentJS还是NodeJS (v14.15.4)的问题?
> a = moment(new Date('2021-10-31'))
Moment<2021-10-31T02:00:00+02:00>
> b = moment(new Date('2021-11-01'))
Moment<2021-11-01T01:00:00+01:00>
> a.diff(b, 'days')
0
> a.diff(b, 'hours')
-24
一个可能的原因可能是从10月31日到11月1日*
官方发生的夏季=>冬季变化。从“2021-10-31”到夏季时间Moment<2021-10-31T02:00:00+02:00>
(2h)的解析可以明显看出这一点。
然而,我认为24小时的差异不应该是0天,因此它是一个瞬间的bug。
*
虽然每个人实际上都把他们的时钟拨回了10月31日星期天...去想一想。
发布于 2021-11-04 09:28:23
我认为这是因为小时发生了变化,而在.diff()
中,对于get小时,它返回一个小于1的数字,而moment则将其舍入为0。
您可以在moment声明中不带use Date的情况下更改代码:
const a = moment('2021-10-31');
const b = moment('2021-11-01');
console.log(a.diff(b, 'days')); // -1
console.log(a.diff(b, 'hours')); // -25 <- but this is wrong
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
或者你也可以强制.diff()
函数返回一个浮点型而不是整型来放入第三个参数,然后像这样进行舍入:
const a = moment(new Date('2021-10-31'));
const b = moment(new Date('2021-11-01'));
console.log(Math.round(a.diff(b, 'days', true)));
console.log(Math.round(a.diff(b, 'hours', true)));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
否则就是强制moment使用utc日期:
const a = moment.utc(new Date('2021-10-31'));
const b = moment.utc(new Date('2021-11-01'));
console.log(a.diff(b, 'days'));
console.log(a.diff(b, 'hours'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
https://stackoverflow.com/questions/69797377
复制相似问题