<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>
<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>
<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>
好了
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:孟E
确实是规则理解的问题,不过,目前偶只能按他们的理解来[小虾米就是麻烦]期待一种优雅的做法
<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>
8过,既然是弱类型语言,parseInt 就不需要了;thanks lots
<!--
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>
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>