根据配送日期,计算到货时间 (客制化自用)

/**
 * @param {deliverDay} 需要配送的天数
 * @param {date} 开始配送的时间,一般默认是当天
 * @param {isObject} 自身需要的格式调整 (true 将计算出来的日期以对象的格式传出)
*/
//计算在规定的送货时间之中,有多少休息日,需要加上,再计算出具体的到货日期
export const getHolidayDay = function (deliverDay = 4,date = new Date(),isObject = false) {
  let today = date;//使用传入的
  let deliverFinalDate = '';//拼接出来的最终的日期字符串
  let festivalTimeStampArray = getFixedFestival();//特殊节假日的时间戳数组集合
  //要在这里先加一天
  let currentTimeStamp = today.getTime()+24*60*60*1000;//当天的时间戳

  let holidayTimeStampArray  = [];//统计的送货期间的假期的时间戳
  let holidayNum = 0;//计算送货期间的假期天数
  let dateStamp = 0;
  let finalDateStamp = 0;//最终的到货日期
  let filnalDate = new Date(finalDateStamp);
  if(deliverDay<1){
    //是否返回对象的形式
    if(isObject === true){
      deliverFinalDate = {day:getDayName(today.getDay()),date:getMonthName(today.getMonth()+1)+','+today.getDate() + ' '+today.getFullYear()}
    }else{
      deliverFinalDate = getDayName(today.getDay)+','+ today.getDate() + ' '+getMonthName(today.getMonth()+1);
    }
  }else{
    for(let i = 0;i< deliverDay;i++){
      dateStamp = currentTimeStamp+(i*24*60*60*1000);
      let day = new Date(dateStamp).getDay();
      //防止重复增加 -- 这里面有三个判断
      //周六或者周日且不在计算的固有节假日中
      let flag1 = (day == 6 || day == 0) && festivalTimeStampArray.indexOf(dateStamp) == -1;
      //在固有的节假日中
      let flag2 = festivalTimeStampArray.indexOf(dateStamp) != -1;
      //不再已经统计的假期中
      let flag3 = holidayTimeStampArray.indexOf(dateStamp) == -1;
      let flag5 = festivalTimeStampArray.indexOf(dateStamp) == -1;
      if((flag1 || flag2 ) && flag3){
        //原来的写法
        // holidayNum += 1;
        deliverDay += 1;
        holidayTimeStampArray.push(dateStamp);
      }
    }
    //当前获取到的最终到货时间
    finalDateStamp = dateStamp + (holidayNum*24*60*60*1000);
    filnalDate = new Date(finalDateStamp);

    if(isObject === true){
      deliverFinalDate = {day:getDayName(filnalDate.getDay()),date:getMonthName(filnalDate.getMonth()+1)+','+filnalDate.getDate() + ' '+filnalDate.getFullYear()}
    }else{
      deliverFinalDate = getDayName(filnalDate.getDay())+','+ filnalDate.getDate() + ' '+getMonthName(filnalDate.getMonth()+1);
    }
  }
  return deliverFinalDate;
}

相关的获取节假日的函数:getFixedFestival等等

获取月份对应的英文名:月份对应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值