首页 > 解决方案 > 如何获取两个日期范围之间的天数(交集)/Javascript/Moment 中两个日期范围之间相交的天数

问题描述

TotalStartDate: 01/28 TotalEndDate: 02/22

我有很多日期,比如

数据:

StartDate2:01/27 endDate2:02/02
StartDate2:02/03 endDate2:02/09
StartDate2:02/10 endDate2:02/16
StartDate2:02/17 endDate2:02/23


dateRanges=[
{"startDate":01/27,"EndDate":02/02}
{"startDate":02/03,"EndDate":02/09}
{"startDate":02/10,"EndDate":02/16}
{"startDate":02/17,"EndDate":02/23}
]

现在我不需要在初始日期范围内获得与数据范围匹配的日期

[0] 索引数据范围从 01/27 开始,TotalStartDate 从 01/28 开始,因此浪费了 1 天,只应计算 6 天

[1] 索引数据范围从 02/03 开始​​,TotalStartDate 从 01/28 开始 [1] 索引数据范围的所有日期都在 TotalStartDate 和 TotalEndDate 之内,因此计数应为 7

[2] 计数 7

[3] 计数 6 作为 enddate 大于 totalEndDate 。

标签: javascriptecmascript-6momentjs

解决方案


这是你要找的东西吗?

我们可以使用的算法来实现这一点:

  • 假设我们有 dateRanges 数组、inputStartDate、inputEnddate 作为输入。
  • 我们必须遍历我们的 dateRanges 数组,以便我们可以根据条件计算天数。
  • 让我们计算要考虑的开始日期(是数组中的 startDate 还是输入的开始日期。同样,我们需要确定要考虑的 endDate。
  • 最后,当我们收到要考虑的开始日期和结束日期时,我们可以简单地计算两个日期之间的差异。

下面是相同的代码。

我有我的 dateRanges 数组、inputStartDate、inputEnddate 和我的逻辑来计算输入范围之间的天数,如下所示:

let dateRanges=[
{"startDate":"01/27","EndDate":"02/02"},
{"startDate":"02/03","EndDate":"02/09"},
{"startDate":"02/10","EndDate":"02/16"},
{"startDate":"02/17","EndDate":"02/23"}
]
let inputStartDate = "01/28"

let inputEndDate = "02/22"

dateRanges.forEach(eachDate => {
    var endDateToConsider = moment(eachDate.EndDate+'/2019').isAfter(inputEndDate+"/2019") ? inputEndDate: eachDate.EndDate;
    var startDateToConsider = moment(eachDate.startDate+'/2019').isAfter(inputStartDate+"/2019") ? eachDate.startDate : inputStartDate
    var daysDifference = moment(endDateToConsider+'/2019').diff(moment(startDateToConsider+'/2019'), 'days') + 1
    console.log(daysDifference)

})

推荐阅读