天数的非整数差
non-integral difference in days
我不是在问为什么下面的 differenceInDays
是错误的。
弄清楚这一点后,我有点想踢自己了。
但我想知道什么是正确的解决方法。
/**
* differenceInDays - return the difference in days between 2 dates.
*
* Since `moment.duration.asDays` can return a non-integral value
* (i.e. 36 hours == 1.5 days) each date is first adjusted to the
* start of day before the difference is determined.
*/
const differenceInDays = (date1, date2, timezone) => {
const localStartOfDay1 = moment(date1)
.tz(timezone)
.startOf('day');
const localStartOfDay2 = moment(date2)
.tz(timezone)
.startOf('day');
return moment.duration(localStartOfDay2.diff(localStartOfDay1)).asDays();
};
expect(differenceInDays('2020-03-08T17:00:00Z',
'2020-03-09T17:00:00Z',
'America/New_York')).toEqual(1);
Expected value to equal:
1
Received:
0.9583333333333334
如果 date1
和 date2
之间发生 DST 转换或闰年调整,结果可能不是整数。
一种解决方法是只对结果进行四舍五入。
我不是在问为什么下面的 differenceInDays
是错误的。
弄清楚这一点后,我有点想踢自己了。
但我想知道什么是正确的解决方法。
/**
* differenceInDays - return the difference in days between 2 dates.
*
* Since `moment.duration.asDays` can return a non-integral value
* (i.e. 36 hours == 1.5 days) each date is first adjusted to the
* start of day before the difference is determined.
*/
const differenceInDays = (date1, date2, timezone) => {
const localStartOfDay1 = moment(date1)
.tz(timezone)
.startOf('day');
const localStartOfDay2 = moment(date2)
.tz(timezone)
.startOf('day');
return moment.duration(localStartOfDay2.diff(localStartOfDay1)).asDays();
};
expect(differenceInDays('2020-03-08T17:00:00Z',
'2020-03-09T17:00:00Z',
'America/New_York')).toEqual(1);
Expected value to equal:
1
Received:
0.9583333333333334
如果 date1
和 date2
之间发生 DST 转换或闰年调整,结果可能不是整数。
一种解决方法是只对结果进行四舍五入。