计算第二天的日期的要点在于,在跨月时进入下一月,在跨年时进入下一年。其他时间只要天数加1就行。所以找出每个月的最后一天就ok了。
function tomorrow_date (y,m,d){ //参数里的月份需要是自然月。也就是说月份+1这步在传参前就设置好
var run = false; //判断是否是闰年
if (!(y%4)) { //如果年份是4的整数倍
if (!(y%100)) { //如果是整百年
if (!(y%400)) { //如果是400的整数
run = true;
}
}else{
run = true;
}
}
if(d==28&&m==2){ //2月28日
if(!run) { //非闰年
d=1;
m++;
}else{ //闰年
d++;
}
}else if(d==29&&m==2){ //2月29日
d=1;
m++;
}else if(d==30&&(m==4||m==6||m==9||m==11)){ //30天的月份里的第30天
d=1;
m++;
}else if(d==31){ //31天的月份里的第31天
d=1;
if (m==12){ //如果是12月则进入下一年
m=1;
y++;
}else{
m++;
}
}else{ //如果今天不是月份的最后一天
d++;
}
return "明天是"+y+"年"+m+'月'+d+'日';
}
var myDate = new Date();
var y = myDate.getFullYear();
var m = myDate.getMonth()+1; //因为js的月份是从0开始的,所以这里月份+1
var d = myDate.getDate();
document.write(tomorrow_date(y,m,d));
感谢TianMao指出闰年的问题~另外他提出了使用Date对象的setDate方法来计算下一天的办法。这个办法很简便,当我们重设了日期(第几天)后,JavaScript会自动更新Date对象的月份、年份,这样就我们就不用自己写上面的判断了。
var myDate = new Date(); myDate.setDate(myDate.getDate()+1); var y = myDate.getFullYear(); var m = myDate.getMonth()+1; var d = myDate.getDate(); console.log(y,m,d);
Google Chrome 53
Windows 10/11
Google Chrome 53
Windows 10/11 var 今天=new Date();
今天.setFullYear(2016,1,28);
var 第一天 = new Date();
var 第二天 = new Date();
第一天.setTime(Date.parse(今天)+86400000*1);
第二天.setTime(Date.parse(今天)+86400000*2);
console.log(今天.toLocaleDateString());
console.log(第一天.toLocaleDateString());
console.log(第二天.toLocaleDateString());
Google Chrome 52
Windows 7 x64 Edition 美国人哭了
Google Chrome 45
Windows 10/11 var myDate = new Date();
var y = myDate.getFullYear();
var m = myDate.getMonth();
var d = myDate.getDate();
console.log(y,m,d);
myDate .setDate(myDate.getDate() + 1);
var y = myDate.getFullYear();
var m = myDate.getMonth();
var d = myDate.getDate();
console.log(y,m,d);
用setDate感觉更好,本身api就处理了月份进位和闰年问题,Saber酱的代码没有处理整百年要除400判断闰年的问题吧( ̄▽ ̄)
转成时间戳+86400000再转回来呗.