js时间分割,租赁合同时间计算,按自然月分出日期,用moment实现

200 阅读1分钟
import moment from "moment";
/**
* 将指定日期区间按月份分割
* @param {Object} beginDate 开始日期
* @param {Object} endDate 结束日期
* @return {Array} 分割好的array数组
*/
     export function dateCutByMonth(beginDate, endDate) {
    //分割好的数组
    let dateCutList = new Array();
  
    //获取日期之间相差的月数;
    let monthArray = monthList(beginDate,endDate);
    //按月份分割日期
    for (let i = 0; i < monthArray.length; i++) {
  
      //第一次循环:开始月份
      if (i == 0) {
        //首月最后一天
        let lastDate = moment(monthArray[i]).endOf('month').format("YYYY-MM-DD");

        dateCutList.push({ "beginDate": beginDate, "endDate": lastDate });

        //除第一次和最后一次循环:中间月份	
      } else if (i != 0 && i != monthArray.length - 1) {
        //获取除了首月 每个月的第一天
        let fristDate = moment(monthArray[i]).startOf('month').format("YYYY-MM-DD");

        let lastDate = moment(monthArray[i]).endOf('month').format("YYYY-MM-DD");

        dateCutList.push({ "beginDate": fristDate, "endDate": lastDate });
  
        //   //最后一次循环:结束月份
      } else if (i == monthArray.length - 1) {
        let fristDate = moment(monthArray[i]).startOf('month').format("YYYY-MM-DD");
        dateCutList.push({ "beginDate": fristDate, "endDate": endDate });
      }
    }
    return dateCutList; 
      }
      /**
    * 获取日期区间的月份集合
    */
    function monthList(beginDate,endDate) {
        const startTime = moment(moment(beginDate).format('YYYY-MM-DD'));
        const endTime = moment(moment(endDate).format('YYYY-MM-DD'));
        const allYearMonth = []; // 接收所有年份和月份的数组
        while (endTime > startTime || startTime.format('M') === endTime.format('M')) {
          allYearMonth.push(startTime.format('YYYY-M'));
         startTime.add(1,'month');
        }
        return allYearMonth;
      }

  
      export default{
        dateCutByMonth
      }
    `