saber酱的抱枕

Fly me to the moon

09/1
08:00
学习

JavaScript计算明天的日期

计算第二天的日期的要点在于,在跨月时进入下一月,在跨年时进入下一年。其他时间只要天数加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);

JavaScript计算明天的日期

    1. Misaka
      Google Chrome 53Google Chrome 53WindowsWindows

      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());

      回复
  1. Google Chrome 45Google Chrome 45WindowsWindows

    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判断闰年的问题吧( ̄▽ ̄)

    回复