js 日期按年月日增加

<script>
function isleapyear(year)
{
    if(parseInt(year)%4==0 && parseInt(year)%100!=0)return true;
    if(parseInt(year)%400==0)return true;
    return false;
}

function datedrift(date,difference)
{    
    var year=parseInt(date.getUTCFullYear()),
        mon=parseInt(date.getUTCMonth())+1,
        day=parseInt(date.getUTCDate());
        sumdays=[31,59,90,120,151,181,212,243,273,304,334,365,31,60,91,121,152,182,213,244,274,305,335,366];
    if(typeof difference!="string" || difference.length==0)return date;
    var units=difference.match(/([+-]\d{1,3}[myd])/ig);
    for(var i=0;i<units.length;i++)
    {
        
        if(units[i].charAt(0)==‘+‘)
        {
            var mark=units[i].substr(-1,1);
            var value=parseInt(units[i].substr(1,units[i].length-2));
            if(mark ==‘y‘)
            {
                if(day<=28)
                {
                    year=year+value;
                }
                else if(day==29)
                {
                    year=year+value;
                    if(mon==2)
                    {
                        if(!isleapyear(year))
                            day=28;
                    }
                }
                else
                {
                    year=year+value;

                }
            }
            else if(mark == ‘m‘)
            {
                year+=Math.floor((value+mon)/12);
                mon=(value+mon)%12;
                if(day==29 && mon==2 && !isleapyear(year))day=28;
                else if(day>=30 && mon==2)
                {
                    if(isleapyear(year))day=29;
                    else day=28;
                }
                else if(day==31 && (mon==4 || mon==6 || mon==9 || mon==11))day=30;
            }
            else if(mark== ‘d‘)
            {
                year+=Math.floor((day+sumdays[(mon<3?(mon-1):(isleapyear(year)?(mon+11):(mon-1)))-1]+value)/365);
                if(isleapyear(year))
                {
                    var days=((day+sumdays[(mon<3?(mon-1):(isleapyear(year)?(mon+11):(mon-1)))-1]+value)%365);
                    if(days>=0 && days<31){mon=1;day=days==0?1:days}
                    else if(days>=31 && days<60){mon=2;day=days==31?1:(days-31)}
                    else if(days>=60 && days<91){mon=3;day=days==60?1:(days-60)}
                    else if(days>=91 && days<121){mon=4;day=days==91?1:(days-91)}
                    else if(days>=121 && days<152){mon=5;day=days==121?1:(days-121)}
                    else if(days>=152 && days<182){mon=6;day=days==152?1:(days-152)}
                    else if(days>=182 && days<213){mon=7;day=days==182?1:(days-182)}
                    else if(days>=213 && days<244){mon=8;day=days==213?1:(days-213)}
                    else if(days>=244 && days<274){mon=9;day=days==244?1:(days-244)}
                    else if(days>=274 && days<305){mon=10;day=days==274?1:(days-274)}
                    else if(days>=305 && days<335){mon=11;day=days==305?1:(days-305)}
                    else if(days>=335 && days<=366){mon=12;day=days==335?1:(days-335)}
                }
                else
                {
                    var days=((day+sumdays[(mon<3?(mon-1):(isleapyear(year)?(mon+11):(mon-1)))-1]+value)%365);
                    if(days>=0 && days<31){mon=1;day=days==0?1:days}
                    else if(days>=31 && days<59){mon=2;day=days==31?1:(days-31)}
                    else if(days>=59 && days<90){mon=3;day=days==59?1:(days-59)}
                    else if(days>=90 && days<120){mon=4;day=days==90?1:(days-90)}
                    else if(days>=120 && days<151){mon=5;day=days==120?1:(days-120)}
                    else if(days>=151 && days<181){mon=6;day=days==151?1:(days-151)}
                    else if(days>=181 && days<212){mon=7;day=days==181?1:(days-181)}
                    else if(days>=212 && days<243){mon=8;day=days==212?1:(days-212)}
                    else if(days>=243 && days<273){mon=9;day=days==243?1:(days-243)}
                    else if(days>=273 && days<304){mon=10;day=days==273?1:(days-273)}
                    else if(days>=304 && days<334){mon=11;day=days==304?1:(days-304)}
                    else if(days>=334 && days<=365){mon=12;day=days==334?1:(days-334)}
                }
                
            }

        }
        else
        {

        }
    }

    alert([year,mon,day]);
}
var curdate=new Date();
datedrift(curdate,"+6m +3y +130d");
</script>

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。