首页 > 解决方案 > 如何以天为单位获取 JS 中的日期差异(不考虑小时差异)

问题描述

对不起,如果问题是重复的,但我在这里找不到任何关于我的案例的内容。我有一个函数getDaysDiff,我在其中传递了两个(startDate, endDate)日期字符串参数,并期望在几天内获得两个日期之间的差异,但有一些细节。像这样:

  1. 如果我通过'2021-07-19T23:59:59'并且'2021-07-20T00:00:01'我想获得1 天作为返回值,因为日期不同,即使小时数小于 24
  2. 对于两个日期接近但小时数超过 24 小时的情况也是如此,例如'2021-07-19T00:00:01'and '2021-07-20T23:59:59',在这种情况下,我仍然想获得1 天
  3. 最后,它应该适用于不同月份的相邻日期,例如'2021-07-30T23:59:59'并且'2021-08-01T00:00:01'应该返回1 天

我尝试应用以下功能,但由于Math.round/floor/ceil它在上述一种情况下无论如何都会中断。

function getDaysDiff(start, end) {
  const date1 = new Date(start);
  const date2 = new Date(end);

  const oneDay = 1000 * 60 * 60 * 24;

  const diffInTime = date2.getTime() - date1.getTime();

  const diffInDays = Math.ceil(diffInTime / oneDay);

  return diffInDays;
}

console.log(getDaysDiff('2021-07-19T23:59:59', '2021-07-20T00:00:01'));
console.log(getDaysDiff('2021-07-19T00:00:01', '2021-07-20T23:59:59'));
console.log(getDaysDiff('2021-07-31T23:59:59', '2021-08-01T00:00:01'));

有没有一种简便的方法来获得这种差异?

标签: javascriptdatedatetime

解决方案


推荐阅读