最近在做一个电商项目,然后里面有个小功能,记录一下。
要求:通过货期计算预计发货日。
后端提供数据:货期
这里我们用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,看结果