js 根据当前日期计算,加减天数、月份
function dateFormat(date,type='yyyy-MM-dd hh:mm:ss') {
let format = type;
if (date != 'Invalid Date') {
var obj = {
'M+': date.getMonth() + 1,
'd+': date.getDate(),
'h+': date.getHours(),
'm+': date.getMinutes(),
's+': date.getSeconds(),
'q+': Math.floor((date.getMonth() + 3) / 3),
'S': date.getMilliseconds()
};
if (/(y+)/.test(format)) format = format.replace(RegExp.$1,
(date.getFullYear() + '').substr(4 - RegExp.$1.length));
for (var key in obj)
if (new RegExp('(' + key + ')').test(format))
format = format.replace(RegExp.$1,
RegExp.$1.length == 1 ? o[key] :
( '00' + obj[key] ).substr( ( '' + obj[key]).length));
return format;
}
return '';
}
加减天数
let time = '2021-10-11 22:02:30'
let num = 10
dateFormat(new Date((new Date(time ).getTime()) + (86400000) * (-num)))
加减月份【2024-01-31重新修正】
function addSubtractMonths(date, monthNum, flag = 'add') {
let arr = []
if (typeof date === 'object' && Object.prototype.toString.call(date) === '[object Date]') {
arr = dateFormat(date, "yyyy-MM-dd").split('-');
} else {
let reg1 = /^\d{4}-\d{2}-\d{2}/
let reg2 = /^\d{4}\/\d{2}\/\d{2}/
if (reg1.test(date)) {
arr = date.split('-');
} else if (reg2.test(date)) {
arr = date.split('/');
} else {
return "date格式错误,请按照规定格式输入!"
}
}
if (isNaN(Number(monthNum))) {
return "monthNum数据类型错误,请按照规定格式类型Number输入!"
}
var regex = new RegExp('^' + ['add', 'subtract'].join('|') + '$');
if (!regex.test(flag)) {
return "flag非规定枚举,请按照规定枚举输入!"
}
let year = Number(arr[0]);
let month = Number(arr[1]);
let day = arr[2]
let absMonth = Math.abs(monthNum)
let multiple = Math.floor(absMonth / 12)
let natureMonth = absMonth - multiple * 12
if (flag == 'add') {
if (absMonth >= 12) {
year = year + multiple
}
if (absMonth != 12) {
if (natureMonth + month > 12) {
year = year + 1
month = natureMonth + month - 12
} else {
month = natureMonth + month
}
}
}
if (flag == 'subtract') {
if (absMonth >= 12) {
year = year - multiple
}
if (absMonth != 12) {
if (natureMonth > month) {
year = year - 1
month = 12 - (natureMonth - month)
} else if (natureMonth < month) {
month = month - natureMonth
} else {
year = year - 1
month = 12
}
}
}
if (month < 10) month = "0" + month
return year + "-" + month + "-" + day;
}
两个时间的时间差(天+时)
let date = new Date(this.currentTime).getTime()
let date2 = new Date(this.currentDate).getTime()
let YQSJ_day = Math.abs(parseInt((date - date2) / (24 * 3600 * 1000)))
let YQSJ_hour = Math.abs(Math.floor((date2 - date - (YQSJ_day * 24 * 3600 * 1000 )) / (3600 * 1000)))
if(YQSJ_hour == 24){
YQSJ_day = YQSJ_day + 1
YQSJ_hour = 0
}
if (date > date2) {
this.afterTime = '已超期' + Math.abs(YQSJ_day) + '天' + Math.abs(YQSJ_hour) + '小时'
} else {
this.afterTime = '距离到期' + Math.abs(YQSJ_day) + '天' + Math.abs(YQSJ_hour) + '小时'
}