一周后,两周、一个月、两个月、三个月、半年后、一年后日期的计算
时间返回格式方法:
function dateFormat(fmt, date) {
let ret;
const opt = {
"Y+": date.getFullYear().toString(), // 年
"m+": (date.getMonth() + 1).toString(), // 月
"d+": date.getDate().toString(), // 日
"H+": date.getHours().toString(), // 时
"M+": date.getMinutes().toString(), // 分
"S+": date.getSeconds().toString() // 秒
// 有其他格式化字符需求可以继续添加,必须转化成字符串
};
for (let k in opt) {
ret = new RegExp("(" + k + ")").exec(fmt);
if (ret) {
fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
};
};
return fmt;
}
startDate=dateFormat('Y-mm-dd',new Date())
一周后、两周后日期比较简单,用天来计算:
function nextDay(d){
const end = new Date();
end.setTime(new Date(startDate).getTime() + 3600 * 1000 * 24 * d);
return dateFormat('Y-mm-dd',end);
},
一周后:nextDay(6)
两周后:nextDay(13)
一个月后、两个月后、三个月后、半年后日期,用月来计算:
function nextMonth(d){
let yesterday_milliseconds=new Date(startDate).getTime()-1000*60*60*24;
let yesterday = new Date();
yesterday.setTime(yesterday_milliseconds);
let yy = yesterday.getFullYear();
let mm = yesterday.getMonth();
let dd = yesterday.getDate();
console.log(mm+d,'mm+d')
let dt = new Date(yy, mm+d, dd);
return dateFormat('Y-mm-dd',dt);
}
这样算会导致一个问题,就是比如说2021年2月份只有28天,那么1月1号开始,一个月后日期是1月31号,两个月后就是3月3号了
于是改为先算月,再减去一天:
nextMonth(d){
let cur=new Date(_this.startDate);
let yy = cur.getFullYear();
let mm = cur.getMonth();
let dd = cur.getDate();
let dt = new Date(yy, mm+d, dd).getTime()-1000*60*60*24;
let yesterday = new Date();
yesterday.setTime(dt);
return dateFormat('Y-mm-dd',yesterday);
}
这样就不会因为2月份的时间造成日期上的误差了
一个月后:nextMonth(1),两个月后:nextMonth(2),三个月后:nextMonth(3),半年后:nextMonth(6)...
一年后日期:
nextYear(date){
var yesterday_milliseconds=new Date(date).getTime()-1000*60*60*24;
var yesterday = new Date();
yesterday.setTime(yesterday_milliseconds);
var strYear = yesterday.getFullYear()+1;
var strDay = yesterday.getDate();
var strMonth = yesterday.getMonth()+1;
if(strMonth<10){
strMonth="0"+strMonth;
}
return strYear+"-"+strMonth+"-"+strDay;
},
nextYear(startDate)