// CalculationDate 计算两个日期之间相差n年m月y天
export const CalculationDate = (s, e) => {
  let startDate = new Date(s);
  let endDate = new Date(e);

  let numYear = endDate.getFullYear() - startDate.getFullYear();

  let numMonth = endDate.getMonth() + 1 - (startDate.getMonth() + 1);

  let numDay = 0;
  //获取截止月的总天数
  let endDateDays = getMonthDay(endDate.getFullYear(), endDate.getMonth() + 1);

  //获取截止月的前一个月
  let endDatePrevMonthDate = getPreMonth(e);
  //获取截止日期的上一个月的总天数
  let endDatePrevMonthDays = getMonthDay(endDatePrevMonthDate.getFullYear(), endDatePrevMonthDate.getMonth() + 1);
  //获取开始日期的的月份总天数
  let startDateMonthDays = getMonthDay(startDate.getFullYear(), startDate.getMonth() + 1);

  //判断，截止月是否完全被选中，如果相等，那么代表截止月份全部天数被选择
  if (endDate.getDate() == endDateDays) {
    numDay = startDateMonthDays - startDate.getDate() + 1;

    //如果剩余天数正好与开始日期的天数是一致的，那么月份加1
    if (numDay == startDateMonthDays) {
      numMonth++;
      numDay = 0;
      //超过月份了，那么年份加1
      if (numMonth == 12) {
        numYear++;
        numMonth = 0;
      }
    }
  } else {
    numDay = endDate.getDate() - startDate.getDate() + 1;
  }

  //天数小于0，那么向月份借一位
  if (numDay < 0) {
    //向上一个月借一个月的天数
    numDay += endDatePrevMonthDays;

    //总月份减去一个月
    numMonth = numMonth - 1;
  }

  //月份小于0，那么向年份借一位
  if (numMonth < 0) {
    //向上一个年借12个月
    numMonth += 12;

    //总年份减去一年
    numYear = numYear - 1;
  }
  if (numYear < 0) {
    console.log("日期异常");
    return;
  }

  let str = ``;
  if (numYear > 0) {
    str = str + numYear + "年";
  }
  if (numMonth > 0) {
    str = str + numMonth + "个月";
  }
  if (numDay > 0) {
    str = str + numDay + "天";
  }
  // console.log(str);
  return str
};

// getMonthDay 获取某年某月有多少天
const getMonthDay = (year, month) => {
  let days=0
  if (month != 2) {
    if (month == 4 || month == 6 || month == 9 || month == 11) {
      days = 30;
    } else {
      days = 31;
    }
  } else {
    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
      days = 29;
    } else {
      days = 28;
    }
  }
  return days;
};

const getPreMonth=(e)=>{
    let time = new Date(e)
    let year=time.getFullYear()
    let month=time.getMonth()
    let day=time.getDate()

    if(month===0){
        year--
    }
    return new Date(`${year}-${month}-${day}`)
}

