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