<BODY>  
<script  language=javascript>  
function  nextMonth(dtstr){  
   var s=dtstr.split("-");
   var yy=parseInt(s[0]); var mm=parseInt(s[1])-1;var dd=parseInt(s[2]);
   var dt=new Date(yy,mm,dd);dt.setMonth(dt.getMonth()+1);
   if(dt.getMonth()-mm > 1){dt=new Date(dt.getYear(),dt.getMonth(),0);}
   return dt;
}  
function  nextYear(dtstr){  
   var s=dtstr.split("-");
   var yy=parseInt(s[0]); var mm=parseInt(s[1])-1;var dd=parseInt(s[2]);
   var dt=new Date(yy,mm,dd);dt.setYear(dt.getYear()+1);
   if(dt.getMonth()-mm >0) dt=new Date(dt.getYear(),dt.getMonth(),0);
   return dt;
}  
alert(nextMonth("2000-1-31"));
alert(nextYear("2000-2-29"));
</script>  
</BODY>

解决方案 »

  1.   

    两个判断条件不够准确  改成下面的
    <BODY>  
    <script  language=javascript>  
    function  nextMonth(dtstr){  
       var s=dtstr.split("-");
       var yy=parseInt(s[0]); var mm=parseInt(s[1])-1;var dd=parseInt(s[2]);
       var dt=new Date(yy,mm,dd);dt.setMonth(dt.getMonth()+1);
       if( (dt.getYear()*12+dt.getMonth()) > (yy*12+mm + 1) ){dt=new Date(dt.getYear(),dt.getMonth(),0);}
       return dt;
    }  
    function  nextYear(dtstr){  
       var s=dtstr.split("-");
       var yy=parseInt(s[0]); var mm=parseInt(s[1])-1;var dd=parseInt(s[2]);
       var dt=new Date(yy,mm,dd);dt.setYear(dt.getYear()+1);
       if( (dt.getYear()*12+dt.getMonth()) > (yy*12+mm) ) dt=new Date(dt.getYear(),dt.getMonth(),0);
       return dt;
    }  
    alert(nextMonth("2000-1-31"));
    alert(nextYear("2000-2-29"));
    </script>  
    </BODY>
      

  2.   

    nextYear 中的判断条件应该是 if( (dt.getYear()*12+dt.getMonth()) > ((yy+1)*12+mm) )
    好了
    function  nextYear(dtstr){  
       var s=dtstr.split("-");
       var yy=parseInt(s[0]); var mm=parseInt(s[1])-1;var dd=parseInt(s[2]);
       var dt=new Date(yy,mm,dd);dt.setYear(dt.getYear()+1);
       if( (dt.getYear()*12+dt.getMonth()) > ((yy+1)*12+mm) ) dt=new Date(dt.getYear(),dt.getMonth(),0);
       return dt;
    }  
      

  3.   

    to:大花猫
    这样是不是太麻烦了? 偶还有加一个季度,加半年,加3个季度的, 要累死了;to:孟E
    确实是规则理解的问题,不过,目前偶只能按他们的理解来[小虾米就是麻烦]期待一种优雅的做法
      

  4.   

    好了,给你归纳成一个函数
    <BODY>  
    <script  language=javascript>  
    function  addmulMonth(dtstr,n){   // n个月后 
       var s=dtstr.split("-");
       var yy=parseInt(s[0]); var mm=parseInt(s[1])-1;var dd=parseInt(s[2]);
       var dt=new Date(yy,mm,dd);dt.setMonth(dt.getMonth()+n);
       if( (dt.getYear()*12+dt.getMonth()) > (yy*12+mm + n) ){dt=new Date(dt.getYear(),dt.getMonth(),0);}
       return dt;
    }  
    alert(addmulMonth("2000-1-31",1));// 加一个月
    alert(addmulMonth("2000-2-29",12));//加一年
    alert(addmulMonth("2000-1-31",3));//加一季度
    alert(addmulMonth("2000-2-29",6));//加半年
    alert(addmulMonth("2000-2-29",9));//加三个季度
    </script>  
    </BODY>
      

  5.   

    嘿嘿,大花猫,测试通过
    8过,既然是弱类型语言,parseInt 就不需要了;thanks lots
      

  6.   

    <SCRIPT LANGUAGE="JavaScript">
    <!--
    var a = new Date("2000/02/29");
    var b = new Date("2000/02/29");a.setFullYear(a.getFullYear()+1)if(a.getMonth()!=b.getMonth())
    a.setTime(a.getTime()-86400000);alert(a.toLocaleString());//-->
    </SCRIPT>
      

  7.   

    <script>
    Date.prototype.addYearOrMonth=function (type1,num1)
    {
    if(num1==null) num1=1;
    var tempDate=this.getDate();
    switch(type1)
    {
    case 'M': this.setMonth(this.getMonth()+num1); break ;
    case 'Y': this.setYear(this.getFullYear()+num1); break ;
    }
    if(tempDate!=this.getDate()) this.setDate(0);
    return this;
    }var d1=new Date('2005/01/31');
    alert(d1.addYearOrMonth('M'));var d2=new Date('2005/01/31');
    alert(d2.addYearOrMonth('M',3));
    </script>