想要实现一个利用js的Date对象加减日期的方法,如果按照下图的写法,就会有很大的问题,因为涉及到每个月天数的判断,改变天是否应该改变月,月的改变是否引起年的变化,太复杂了吧,这里涉及到联动改变的问题,如下方法是上面效果的错误展示:
<script>
//y:要加减的年 m:月 d:天
function getDateStr(y,m,d){
var date = new Date();
var year = date.getFullYear()+y;
var month = date.getMonth() + 1+m;
var day = date.getDate()+d;
return year+"-"+check(month)+"-"+check(day);
}
function check(val) {
if (val < 10) {
return "0" + val;
} else {
return val;
}
}
console.log(getDateStr(0,0,100));
</script>
执行结果:2018-03-101,因为今天是2018-03-01,这肯定不对啊,最起码要智能的改变月和年吧,其实没这么复杂,关键还是要熟练运用JavaScript的Date对象,正确的写法如下:
<script>
//y:年 m:月 d:天
function getDateStr(y,m,d){
var date = new Date();
//根据传入的年月日调用date对应的set方法
date.setFullYear(date.getFullYear()+y);
date.setMonth(date.getMonth()+m);
date.setDate(date.getDate()+d) ;
var year = date.getFullYear();
var month = date.getMonth()+1;
var day = date.getDate();
return year+"-"+check(month)+"-"+check(day);
}
function check(val) {
if (val < 10) {
return "0" + val;
} else {
return val;
}
}
console.log(getDateStr(0,0,100));
</script>
执行结果:2018-06-09。需要注意getMonth()的返回值是0-11,不要乱+1,在最后取出来的时候var month = date.getMonth()+1;加上1就可以了。