javascript中对日期加减的一个算法

来源:互联网 发布:算法初步知识点 编辑:程序博客网 时间:2024/06/04 08:29

最近在csp项目中遇到javascript中对指定日期加减一个值后获取新日期的问题,在javascipt中并没有像c#中那样强大的DateTime类(有AddDays(int)方法),所以只好写了一个函数计算

 function DayAddDiff(year, month, day, diff){
            
var numDays = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
            
var isLeap = false;
            
var newyear = year;
            
var newmonth = month - 1;
            
var n = numDays[newmonth];
            
var newday = day;
            
var newdiff = diff;
            
var ln;
            
if (newmonth == 0)
                ln 
= 31;
            
else if(newmonth == 11)
                ln 
= 31;
            
else
                ln 
= numDays[newmonth + 1];
            
if (diff != 0){
                
//判断是否润年
                if (year % 4 == 0){
                    
if (year % 100 != 0)
                        isLeap 
= true;
                    
else{
                        
if (year % 400 == 0)
                            isLeap 
= true;
                    }

                }

                
if (newmonth == 1 && isLeap)
                    
++n;
                    
                
if (newmonth  == 0 && isLeap) 
                    
++ln;
                
//加值
                var newday = day + newdiff;
                
if (newday > 0){
                    
if (newday > n){
                        newday 
= newday - n;
                        
if (newmonth == 11)
                        
{
                            newmonth 
= 0;
                            newyear 
+= 1;
                            newdiff 
= newday - 1;
                            
return DayAddDiff(newyear, newmonth + 11, newdiff);
                        }

                        
else{
                            newmonth 
+= 1
                            newdiff 
= newday - 1;
                            
return DayAddDiff(newyear, newmonth + 11, newdiff);
                        }

                    }

                }

                
else if (newday == 0){
                    
if (newmonth == 0)
                    
{
                        newmonth 
= 11
                        newyear 
+= -1;
                        newday 
= 31;
                    }

                    
else{
                        newmonth 
+= -1
                        newday 
= ln;
                    }

                }

                
else{
                    
if (newmonth == 0)
                    
{
                        newmonth 
= 11
                        newyear 
+= -1;
                        newdiff 
= newday;
                        newday 
= 31;
                        
return DayAddDiff(newyear, newmonth + 1, newday, newdiff);
                    }

                    
else{
                        newmonth 
+= -1;
                        newdiff 
= newday;
                        newday 
= ln;
                        
return DayAddDiff(newyear, newmonth + 1, newday, newdiff);
                    }

                }

            }

            
//输出字符串
            var daystring = "";
            daystring 
+= year;
            newmonth 
+= 1;
            
if (newmonth < 10)
                daystring 
+= "/0" + newmonth;
            
else
                daystring 
+= "/" + newmonth;
            
if (newday < 10)
                daystring 
+= "/0" + newday;
            
else
                daystring 
+= "/" + newday;
            
return daystring;
        }