Javascript 使用日期fns获取两个范围内的重叠月份
我尝试使用以下方法在两个日期间隔内获得重叠的月份:Javascript 使用日期fns获取两个范围内的重叠月份,javascript,node.js,date-fns,Javascript,Node.js,Date Fns,我尝试使用以下方法在两个日期间隔内获得重叠的月份: const range1={开始:新日期('2018-01-01'),结束:新日期('2019-01-01')} 常数范围2={开始:新日期('2018-07-03'),结束:新日期('2019-12-01')} getOverlappingMonthsintervals(a,b))//6 查看date fns文档,我看到了方法GetOverlappingDaysInsIntervals,但在几个月内没有类似的方法。有没有一种方法可以通过日期
const range1={开始:新日期('2018-01-01'),结束:新日期('2019-01-01')}
常数范围2={开始:新日期('2018-07-03'),结束:新日期('2019-12-01')}
getOverlappingMonthsintervals(a,b))//6
查看date fns文档,我看到了方法
GetOverlappingDaysInsIntervals
,但在几个月内没有类似的方法。有没有一种方法可以通过日期fns或解决方法(除了GetOverlappingDaysInsIntervals/30
)实现这一点您可以使用其他方法创建自己的重叠月份函数
功能。请参见下面的示例
在我的回答中,我假设两个时间间隔有一个重叠的月份
如果两个时间间隔都跨越该日历月的整个时间间隔。以你为例
范围有5个重叠月份:8月、9月、10月、11月和
2018年12月
JFMAMJJASONDJFMAMJJASOND
1 |------+++++|
2 |+++++-----------|
- 这可以使用函数完成
- 如果两个间隔重叠,则重叠开始日期将为最大值 这两个时间间隔的开始日期。并且,重叠结束日期将是 两个间隔中的最小间隔结束日期
- 我们可以使用和函数来实现这一点
- 我们可以使用(或, )功能
导入{
如果间隔重叠,
最大值,
闵,
//不同的月份,
不同的亚毫米,
}从“日期fns”
常量GetOverlappingMonthInterval=(r1,r2)=>{
if(间隔重叠(r1,r2)){
常量开始=最大值([r1.start,r2.start])
const end=min([r1.end,r2.end])
返回differenceInCalendarMonths(end,start)//或使用` differenceimonths'`
}否则返回0
}
const range1={开始:新日期('2018-01-01'),结束:新日期('2019-01-01')}
常量范围2={开始:新日期('2018-07-01'),结束:新日期('2019-12-01')}
log(getOverlappingMonthInterval(range1,range2))//5
我喜欢对以下函数使用条件运算符:
//一行
常量GetOverlappingMonthInterval=(r1,r2)=>
A间隔重叠(r1,r2)
? 差分余弦(
最小值([r1.end,r2.end]),
最大值([r1.start,r2.start])
)
: 0