优惠卷到期时间设置:输入一个日期,计算这个日期加上若干天后是什么日期?

该博客介绍了两种JavaScript实现日期加减法的方法。第一种是通过自定义逻辑,逐天累加,处理闰年和不同月份天数;第二种是利用内置Date对象的属性和方法直接进行日期运算。示例中展示了如何给指定日期添加天数并输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目范例:输入 2008 2 3 ,然后输入需要添加的天数 100 ,输出 2008 5 13
可以用于设置优惠卷过期时间的应用

有两种方式实现,一种是自己写逻辑的方式,第二种是利用date对象直接让date去处理

第一种方式:自己去实现内部判断逻辑

思路:将日期参数放到一个数组当中,然后利用得到的添加天数100,进行循环遍历,一天一天的加,每循环一次,添加天数 -1 ,直到添加天数为0,输出即可。(其中需要判断每个月的天数,是否为闰年,到月底月数+1,到年底年数+1)
代码如下:

// 利用数组存储日期参数
var arr = [2022, 1, 10] //初始日期
var addday = 11 //增加天数
function MyDate(year, month, day) {
    this.day = day
    this.month = month
    this.year = year
}
function MyDateO(date) {
    this.day = date.day
    this.month = date.month
    this.year = date.year
}
MyDate.prototype.day = 1
MyDate.prototype.month = 1
MyDate.prototype.year = 2000

var nowdays = new MyDate(arr[0], arr[1], arr[2])
console.log("现在日期:"+nowdays.year+"年"+nowdays.month+"月"+nowdays.day+"日","添加天数"+ addday);
计算日期,参数为需要增加的天数和现在的日期
function addDays(add_days, nowdays) {
    var temp_data = new MyDateO(nowdays)
    while (true) {
        temp_data = nextDay(temp_data) //计算下一天
        add_days--;             //要增加的天数--
        if (add_days == 0) {    //当要增加的天数等于0时,停止循环
            break;
        }
        
    }
    return temp_data
}
function nextDay(date) { //计算下一天
    // console.log(date);
    if (date.day == isLastDays(date.year, date.month))	//如果是月底
    {
        date.day = 1;									//那么下一天则置天数为1
        date.month++;									//月份++
        if (date.month == 13)							//如果是年底
        {
            date.month = 1;							//那么月份置为1
            date.year++;								//年份加1
        }
    }
    else												//如果不是月底,天数加一即可
        date.day++;
    return date;
}
function isLastDays(year, month) { //返回对应月份的天数
    if (isRun(year) && month == 2)
        return 29;
    if (month == 2)
        return 28;
    if (month == 4 || month == 6 || month == 9 || month == 11)
        return 30;
    return 31;
}
function isRun(year) { //判断是否为闰年
    if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
        return true;
    else
        return false;
}
var nextdays = addDays(addday, nowdays)
console.log("添加后的日期:"+nextdays.year+"年"+nextdays.month+"月"+nextdays.day+"日");

输出结果如下:
在这里插入图片描述

第二种方式是利用date对象

思路: 我们使用用于处理日期与时间的Date 对象。利用Date对象内部封装好的方法实现

// 第二种方法
 /**
  * startDate:起始日期
  * addDay:有效天数
  * getFullYear() 从 Date 对象以四位数字返回年份。
  * getMonth()	  从 Date 对象返回月份 (0 ~ 11)。所以这里月份要加一
  * getDate()	从 Date 对象返回一个月中的某一天 (1 ~ 31)。这里加上我们自定义的添加天数即可
  */
  function AddDay(startDate,addDay){
    //格式化参数 2022-02-27T00:00:00.000Z
    var date = new Date(startDate);
    // 计算addDay天后的日期 2022 1 32传入date将天数重置
    var newDate = new Date(date.getFullYear(),date.getMonth(),date.getDate()+addDay);
    //计算原来日期
    var year1 = date.getFullYear(); // 2022
    var month1 = date.getMonth()+1; // 2
    var day1 = date.getDate(); // 27
    //计算修改后日期
    var year2 = newDate.getFullYear(); // 2022
    var month2 = newDate.getMonth()+1; // 3
    var day2 = newDate.getDate(); // 4
    
    return "原来日期:"+year1+"年"+month1+"月"+day1+"日"+
            "  修改后的日期" +year2+"年"+month2+"月"+day2+"日";
    
}
var asd = "2022-02-27"
let data = AddDay(asd,5)
console.log(data); // 原来日期:2022年2月27日  修改后的日期2022年3月4日

代码结果如下:
在这里插入图片描述

end~

这里的输入输出我是直接定义的,如果需要用户去输入那么就要使用js(V8)进行操作,得到用户输入的数字。
获取一行多个数字,2022 2 10这样以空格隔开的代码写法:let arr =readline().split(" ").map(Number),得到的就是[2022,2,10]这样的数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值