JavaScript 推算n个月之后的今天 返回日期格式

2 篇文章 0 订阅
2 篇文章 0 订阅

项目场景:

简述:表单方式收集用户信息时

例如:有效期三个月、半年、一年


问题描述:

问题:每个月天数不一致如何处理:

例如:当前日期是【2022-03-31】半年后的9月却只有30天,又要怎么使日期选定到【2022-09-30】呢


解决方案:

说明:js计算n个月后的日期,并匹配月底,处理闰年,闰月,下例代码就来解决以上问题,返回时间格式YYYY-MM-DD

//计算num个月后的时间
function getNowdate(n) {
  var date_now = new Date(),
    year = date_now.getFullYear(), //获取当前时间的年份    
    month = date_now.getMonth() + 1, //获取当前时间的月份
    day = date_now.getDate(), //获取当前时间是几号
    num, date_end, days; // 备用变量 后面要用

  // 以下开始计算n个月后的日期 
  month = month + n
  num = parseInt(month / 12);
  if (month > 12) {
    num = month % 12 == 0 ? num - 1 : num; //注:month % 12 == 0时,num-1,若12月的12个月后其实是明年的12月 num应是1 不是2
    year = year + num; //月份大于12个月 年份+num
    month = month % 12 == 0 ? 12 : parseInt(month) % 12; //大于12对12取余数,余数为0时=12月
  }

  //考虑到如果当前日期是【2022-03-31】半年后的9月却只有30天
  date_end = new Date(year, month, 0); //这里可以拿到n个月后的最后一天的日期
  days = date_end.getDate(); //n个月后的最后一天是几号
  if (day > days) {
    day = days //若n个月后没有31号,就取那个月的最后一天,例如:2022-03-31 6个月后只有 2022-09-30
  }
  
  //最后优化下时间格式
  if (month < 10) {
    month = '0' + month
  }
  if (day < 10) {
    day = '0' + day
  }
  return year + '-' + month + '-' + day
}

// 测试时间"2022-03-31"
console.log(getNowdate(3)); // 2022-06-30
console.log(getNowdate(6)); // 2022-09-30
console.log(getNowdate(9)); // 2022-12-31
console.log(getNowdate(12)); // 2023-03-31
console.log(getNowdate(18)); // 2023-09-30
console.log(getNowdate(26)); // 2024-05-31
console.log(getNowdate(39)); // 2025-06-30

总结:

①创建时间对象

②获取当前时间的年份 月份还有几号

③对n个月后的月份做计算,超过12时 年份+1 月份%12(取余数),余数为0时取12为值

④处理类似问题 2022-03-31 半年后的9月却只有30天

⑤知道n个月后的年份跟月份后,获取那个月的总天数

⑥若n个月后的最大日期小于当前日期的号数时,就取那个月的最后一天

⑦最后优化时间格式,月 日数值小于10的,在前面加0

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值