天数的非整数差

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

如果 date1date2 之间发生 DST 转换或闰年调整,结果可能不是整数。

一种解决方法是只对结果进行四舍五入。