js 根据当前日期计算,加减天数、月份

js 根据当前日期计算,加减天数、月份

/**
 * 日期格式化
 */
function dateFormat(date,type='yyyy-MM-dd hh:mm:ss') {
	let format = type;
	if (date != 'Invalid Date') {
		var obj = {
			'M+': date.getMonth() + 1, //month
			'd+': date.getDate(), //day
			'h+': date.getHours(), //hour
			'm+': date.getMinutes(), //minute
			's+': date.getSeconds(), //second
			'q+': Math.floor((date.getMonth() + 3) / 3), //quarter
			'S': date.getMilliseconds() //millisecond
		};
		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重新修正】

/**
 * @description: 加减月份
 * @param {Date | String} date 数据格式:Date对象、2024-01-31、2024/01/31
 * @param {Number} monthNum 月份数量
 * @param {String} flag  枚举值:add, subtract
 * @return void
 */
function addSubtractMonths(date, monthNum, flag = 'add') {
  let arr = []
  //1.对输入的date值进行处理,并抛出错误
  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格式错误,请按照规定格式输入!"
    }
  }
  //2.判断monthNum类型,并抛出错误
  if (isNaN(Number(monthNum))) {
    return "monthNum数据类型错误,请按照规定格式类型Number输入!"
  }
  //3.判断flag是否为规定枚举
  var regex = new RegExp('^' + ['add', 'subtract'].join('|') + '$');
  if (!regex.test(flag)) {
    return "flag非规定枚举,请按照规定枚举输入!"
  }
  //4.解析待判断数据
  let year = Number(arr[0]);
  let month = Number(arr[1]);
  let day = arr[2]
  let absMonth = Math.abs(monthNum)//取monthNum的绝对值
  let multiple = Math.floor(absMonth / 12)//取monthNum的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) + '小时'
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值