javascript - 如何获取两个日期范围之间的天数(交集)/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 。
解决方案
这是你要找的东西吗?
我们可以使用的算法来实现这一点:
- 假设我们有 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)
})
推荐阅读
- c++ - 模板匹配的相位相关
- azure - 在 Azure Function App 中使用 PowerShell 连接到不同的 Azure AD 租户
- qt - 为什么我不能在 QSettings 中存储 QVariantMap?
- java - 如何使用java代码检查服务是否在linux机器上运行
- ios - ARKit 3D Modell 没有纹理
- c++ - 通过鼠标单击获取二维数组的索引
- php - Laravel:在单个自定义规则中分组现有的验证规则?
- tfs - 2018 WIT 布局不同于布局预览
- python - 拆分我的数据框并自动执行我的绘图
- node.js - 如何在 graphql 解析器中返回错误和数据?