js实现,不计算周六周日得到发货日

最近在做一个电商项目,然后里面有个小功能,记录一下。
要求:通过货期计算预计发货日。
后端提供数据:货期

这里我们用js写一下(这东西前端后端都可写的,但是后端偷懒

//这里就用es6的export封装了这个方法
export const deliverytime = (time) => {
//time是传入的货期
  time = time == 0 ? 1 : time;//当货期为0的时候默认给它变成1
  console.log(`货期${time}天`);
  var myDate = new Date();
  let year, month, days, day;
  year = myDate.getFullYear(); //获得当前年
  month = myDate.getMonth(); //获得当前月
  days = myDate.getDate(); //获得当前日
  //获得当前周几 getDay()这个函数是用来获取今天是星期几的。星期天返回的是0
  day = myDate.getDay() == 0 ? 7 : myDate.getDay(); 
  //因为一个月不可能超过32天所以在这里我们用这个方法来获得该月有多少天
  var ddDate = new Date(year, month, 32);
  let days1 = 32 - ddDate.getDate(); //该月有多少天
  let resyear = year; //返回的年
  let resmonth = month; //返回的月
  let resday = 1; //返回的日
  let temp = day==6 ?1 : 0; //如果今天是周六或周日就再减去这一天
  let t = 0;
  if (day - 5 > 0) {
    t = parseInt(((time) / 5) - 1) * 2 + parseInt(time) + parseInt(temp); //加上周六周日总共需要多少天
  } else {
    t = parseInt((time) / 5) * 2 + parseInt(time); //加上周六周日总共需要多少天
  }
  while (days1 - days < t) {
    t = t - parseInt(days1 + days);
    console.log("t:" + t);
    resmonth = resmonth + 1 > 11 ? 0 : resmonth + 1;
    console.log(resmonth);
    resyear = resmonth == 0 ? resyear + 1 : resyear;
    var tempdate = new Date(resyear, resmonth, 32);
    days1 = 32 - tempdate.getDate();
    days = 0;
  }
  resday = days + t;
  return `预计${resyear}${resmonth+1}${resday}日发货`
}

最后看一下结果
在这里插入图片描述

没毛病了,但是该死的后端组还有一个订单发货日的货期
要求:同上
后端提供数据: 下单日期,货期

简单的修改一下,再加个方法(因为js没办法重载)


export const deliverytimes = (time,ordertime) => {
  console.log(`下单时间:${ordertime},货期:${time}`);
  var list=ordertime.toString().split("-")
  const deftime=new Date(list[0],list[1]-1,list[2]);
  let year, month, days, day;
  year = deftime.getFullYear(); //下单时间的年
  month = deftime.getMonth(); //下单时间的月
  days = deftime.getDate(); //下单时间的日
  day = deftime.getDay() == 0 ? 7 : deftime.getDay(); //下单时间是周几
  if(time==0&&day>5){
    return "下一个工作日发货";
  }
  var ddDate = new Date(year, month, 32);
  let days1 = 32 - ddDate.getDate(); //该月有多少天
  let resyear = year; //返回的年
  let resmonth = month; //返回的月
  let resday = 1; //返回的日
  let temp = day==6? 1:0; //如果今天是周六或周日就再减去这一天
  let t = 0;
  //console.log(`${resyear}年${resmonth+1}月${resday}日`);
  if (day - 5 > 0) {
    t = parseInt(((time) / 5)-1) * 2 + parseInt(time) + parseInt(temp); //加上周六周日总共需要多少天
  } else {
    t = parseInt((time) / 5) * 2 + parseInt(time); //加上周六周日总共需要多少天
  }
  while (days1 - days < t) {
    t = t - parseInt(days1 + days);
    console.log("t:" + t);
    resmonth = resmonth + 1 > 11 ? 0 : resmonth + 1;
    console.log(resmonth);
    resyear = resmonth == 0 ? resyear + 1 : resyear;
    var tempdate = new Date(resyear, resmonth, 32);
    days1 = 32 - tempdate.getDate();
    days = 0;
  }
  resday = days + t;
  console.log(`预计${resyear}${resmonth+1}${resday}日发货`);
  return `${resyear}-${resmonth+1}-${resday}`
}

ok,看结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值