与所选日期相对应的月份中的天数

Number of days in the months corresponding to selected dates

我需要从两个日期之间选择的月份中找出天数作为天数。比如我选择date1为2021年1月1日,date2为2021年3月1日,那么我需要得到一月、二月、三月的总天数。

输出=

一月天数+二月天数+三月天数=31+28+31

我尝试了什么:

const getDiff=(selectedDate1,selectedDate2)=>{
    console.log('Date check',moment(selectedDate1).daysInMonth(),moment(new Date()).daysInMonth())
    if(moment(selectedDate1).daysInMonth() - moment(selectedDate2).daysInMonth() ===0){
      return Number(moment(selectedDate1).daysInMonth())
    }else{
      return Number(moment(selectedDate1).daysInMonth())+Number(moment(selectedDate2).daysInMonth())
    }
  }

但是使用这段代码,我只得到所选日期的天数总和,即。只有一月的天数 + 三月的天数

几件事:

  1. 请记住,Java 和 Java 脚本中的月份是(愚蠢的)从 0 开始的。所以第 1 个月是二月

  2. 要获取一个月中的天数,您可以使用 Date 对象并转到下个月的第一天,然后减去 1 天,然后调用 getDay。

  3. 两个日期之间的毫秒数为

    var d1 = ...;
    var d2 = ...;
    var duration = Math.abs(d2.getTime() - d1.getTime());
    

然后,您可以将 duration 除以毫秒 (1000)、秒 (60)、分钟 (60) 等,以获得单位为单位的时间跨度

最简单的方法是:

// 'lo' and 'hi' could be of type Date or numbers coming from Date.getTime()
const daysBetween = (lo, hi) => {
    const oneDayInMilliseconds
        = 1000 // one sec has 1000 millis
        * 3600 // one hour has 3600 seconds
        * 24;  // one day has 24 hours
    return (hi - lo) / oneDayInMilliseconds;
}

使用 moment.js,您只需得到开始月份开始和结束月份结束之间的天数加 1 的差值(因为月底不包括最后一天,加 1 是比转到下个月的月初更简单),例如

function wholeMonthDays(d1, d2) {
  let diff = moment(d2).endOf('month').diff(moment(d1).startOf('month'),'days') + 1; 
  return diff;
}

let start = new Date(2021,0,21);
let end = new Date(2021,2,11);

console.log(wholeMonthDays(start, end)); // 90
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

或者,您可以在 结束 之后的月初获取差值:

function wholeMonthDays(d1, d2) {
  let start = moment(d1).startOf('month');
  let end = moment(d2).startOf('month').add(1, 'month');
  let diff = end.diff(start, 'days');
  return diff;
}

let start = new Date(2021, 0, 21);
let end = new Date(2021, 2, 11);

console.log(wholeMonthDays(start, end)); // 90
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

我将日期设置为月内,以表明它添加了“月中的天数”,而不仅仅是两个日期之间的差异。

如果你真的想要每个月的总天数数组,只需将开始设置为月末,获取日期,添加一个月,设置为月末,等等,直到你已经过了月底。