题目范例:输入 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]这样的数组。