/**
* @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等等
获取月份对应的英文名:月份对应