﻿Date.prototype.getYearFull=function(){
   var y= this.getYear();
   if (y < 2000) { y += 1900; }
   
   return y;
}

Date.prototype.toShortDateString = function (split){
   //日付型から文字列に
        var yy = this.getYearFull();
        var mm = this.getMonth() + 1;
        var dd = this.getDate();
        
        var spl=split;
        if (spl==undefined){
            spl="/";
        }
        
        if (mm < 10) { mm = "0" + mm; }
        if (dd < 10) { dd = "0" + dd; }
        return ""+yy+spl+mm+spl+dd;  
};



Date.prototype.toShortShortDateString = function (){
   //yy/mm/dd型
        var ss = this.toShortDateString();
        ss=ss.substring(2,ss.length);
        
        return ss;  
};


Date.prototype.toShortDateTimeString = function (){
   //日付型から文字列に
     var h=this.getHours();
     if(h<=9){
        h="0"+h;
     }
     var m=this.getMinutes();
     if(m<=9){
        m="0"+m;
     }
   
     return this.toShortDateString()+" "+h+":"+m;
};

Date.prototype.toShortShortDateTimeString = function (){
   //yy/mm/dd型
        var ss = this.toShortDateTimeString();
        ss=ss.substring(2,ss.length);
        
        return ss;  

}

Date.prototype.toDateStringJ = function (){
   //日付型から文字列に
        var yy = this.getYearFull();
        var mm = this.getMonth() + 1;
        var dd = this.getDate();
        
        if (mm < 10) { mm = "0" + mm; }
        if (dd < 10) { dd = "0" + dd; }
        return ""+yy+"年"+mm+"月"+dd+"日";
};

Date.prototype.toDateStringJW = function (){
   //日付型から文字列に
        var yy = this.getYearFull();
        var mm = this.getMonth() + 1;
        var dd = this.getDate();
        var week=this.getWeekJ();
        
        if (mm < 10) { mm = "0" + mm; }
        if (dd < 10) { dd = "0" + dd; }
        return ""+yy+"年"+mm+"月"+dd+"日("+week+")";
};

Date.prototype.toDateStringJS = function (){
   //日付型から文字列に
        
        var yy = this.getYearFull();
        var mm = this.getMonth() + 1;
        var dd = this.getDate();
        
        if (mm < 10) { mm = "0" + mm; }
        if (dd < 10) { dd = "0" + dd; }
        
        if((new Date()).getYearFull()==yy){
            return ""+mm+"月"+dd+"日";
        }else{
            return ""+yy+"年"+mm+"月"+dd+"日";
        }       
        
};

Date.prototype.toDateStringS = function (){
   //日付型から文字列に
        
        var yy = this.getYearFull();
        var mm = this.getMonth() + 1;
        var dd = this.getDate();
        
        if (mm < 10) { mm = "0" + mm; }
        if (dd < 10) { dd = "0" + dd; }
        
        if((new Date()).getYearFull()==yy){
            return ""+mm+"/"+dd;
        }else{
            return ""+yy+"/"+mm+"/"+dd;
        }       
        
};


Date.prototype.toDateStringJWS = function (){
   //日付型から文字列に
        var yy = this.getYearFull();
        var mm = this.getMonth() + 1;
        var dd = this.getDate();
        var week=this.getWeekJ();
        
        if (mm < 10) { mm = "0" + mm; }
        if (dd < 10) { dd = "0" + dd; }

        if((new Date()).getYearFull()==yy){
            return ""+mm+"月"+dd+"日("+week+")";
        }else{
            return ""+yy+"年"+mm+"月"+dd+"日("+week+")";
        }
};

Date.prototype.toDateTimeStringJ = function (){
   //日付型から文字列に
     var h=this.getHours();
     var m=this.getMinutes();
     if(m<=9){
        m="0"+m;
     }
   
     return this.toDateStringJ()+" "+h+"時"+m+"分";
};


Date.prototype.toDateTimeStringJW = function (){
   //日付型から文字列に
     var h=this.getHours();
     var m=this.getMinutes();
     if(m<=9){
        m="0"+m;
     }
   
     return this.toDateStringJW()+" "+h+"時"+m+"分";
};

Date.prototype.toDateTimeStringJS = function (){
   //日付型から文字列に
     var h=this.getHours();
     var m=this.getMinutes();
     if(m<=9){
        m="0"+m;
     }
   
     return this.toDateStringJS()+" "+h+":"+m;
};

Date.prototype.toDateTimeStringS = function (){
   //日付型から文字列に
     var h=this.getHours();
     var m=this.getMinutes();
     if(m<=9){
        m="0"+m;
     }
   
     return this.toDateStringS()+" "+h+":"+m;
};


Date.prototype.toDateTimeStringJWS = function (){
   //日付型から文字列に
     var h=this.getHours();
     var m=this.getMinutes();
     if(m<=9){
        m="0"+m;
     }
   
     return this.toDateStringJWS()+" "+h+":"+m;
};


Date.prototype.getWeekJ = function (){
    var week=new Array("日","月","火","水","木","金","土");
    return week[this.getDay()];
}


Date.prototype.toMDString=function(split){
   //日付型から文字列に
    mm = this.getMonth() + 1;
    dd = this.getDate();
    
    var spl=split;
    if (spl==undefined){
        spl="/";
    }
    
    if (mm < 10) { mm = "0" + mm; }
    if (dd < 10) { dd = "0" + dd; }
    return ""+mm+spl+dd;
    
}

Date.prototype.toMDStringJ=function(){
   //日付型から文字列に
    yy = this.getYearFull();
    mm = this.getMonth() + 1;
    
    if (mm < 10) { mm = "0" + mm; }
    return ""+yy+"年"+mm+"月";
    
}


Date.prototype.getNendoYear=function(){
   var y=this.getYearFull();
   var m=this.getMonth();
   
   if(m<3){
    y--;
   }
   
   return y;
}

Date.prototype.getSimpleDate=function(){
    //時間抜きの日付け取得
    return new Date(this.getYearFull(),this.getMonth(),this.getDate());          
} 


Date.prototype.addMinutes=function(n){
       var dd=new Date(this.getTime()+(60 * 1000)*n);
       return dd;    
}

Date.prototype.addHours=function(n){
       var dd=new Date(this.getTime()+(3600 * 1000)*n);
       return dd;    
}

Date.prototype.addDays=function(n){
       var dd=new Date(this.getTime()+(24 * 3600 * 1000)*n);
       return dd;    
}

Date.prototype.addMonths=function(n){
   var y= this.getYearFull();
   var m= this.getMonth();
   var d= this.getDate();
   
   var ay=Math.floor(n/12);
   y+=ay;
   m+=(n-ay*12);
   if(m>11){
     m-=12;
     y++;
   }
   
   var dt= new Date(y,m,1);
   
   md=dt.getMonthLen();
   
   if(d>md){
    d=md;
   }
   
   return new Date(y,m,d);
          
}

Date.prototype.addYears=function(n){
   return this.addMonths(n*12);
}

Date.prototype.getBussinessDate=function(n){
   return this.addHours(-7).getSimpleDate();
}


Date.prototype.getMonthFirst=function(){
       var y= this.getYearFull();

       var m= this.getMonth();
       return new Date(y,m,1);
}  

Date.prototype.getMonthLen=function(){
    
   var y= this.getYearFull();
   var m= this.getMonth()+1;
   if(m>11){
    y++;
    m=0;
   }
   var nd=(new Date(y,m,1)).addDays(-1);
   return nd.getDate();     
          
} 

var DateTimeFunc={
    parseDate:function(dts){
           //文字列から日付型に
        var reg = /^(\d{2}|\d{4})[\/-](\d{1,2})[\/-](\d{1,2}) +(\d{1,2}):(\d{2}):(\d{2})$/; // YY(YY)/(M)M/(D)D HH:MM:SSにマッチするパターン
        var res = reg.exec( dts )
        if (res){
            return new Date(res[1],res[2]-1,res[3],res[4],res[5],res[6]);
        }else{ 
        
            reg = /^(\d{2}|\d{4})[\/-](\d{1,2})[\/-](\d{1,2})( .*)?$/; // YY(YY)/(M)M/(D)D にマッチするパターン
            res = reg.exec( dts )
            if (res){
                return new Date(res[1],res[2]-1,res[3]);
            }
        }
        
        
        var edt=new Date();
        edt.setTime(0);
        
        return edt;   
           
    },
    dateSpan:function(fromdt,todt){
       var span= todt.getTime()- fromdt.getTime();
       return Number(span/(24 * 3600 * 1000));
    },
    hasDate:function(y,m,d){
        var vYear = y - 0; 
        var vMonth = m - 1; // Javascriptは、0-11で表現 
        var vDay = d - 0; 
        // 月,日の妥当性チェック 
        if(vMonth >= 0 && vMonth <= 11 && vDay >= 1 && vDay <= 31){ 
            var vDt = new Date(vYear, vMonth, vDay); 
            if(isNaN(vDt)){ 
                return false; 
            }else if(vDt.getFullYear() == vYear && vDt.getMonth() == vMonth && vDt.getDate() == vDay){ 
                return  true; 
            }else{ 
                return  false; 
            } 
        }else{ 
            return  false; 
        } 
    },
    isDate:function(s) {
        
        // 正規表現による書式チェック
           
        var reg = /^(\d{2}|\d{4})\/(\d{1,2})\/(\d{1,2}$)/; // YY(YY)/(M)M/(D)D にマッチするパターン
        var res = reg.exec( s )
        if (res){
            return this.hasDate(res[1],res[2],res[3]);
        }
        else {
            reg = /^(\d{2}|\d{4})(\d{2})(\d{2}$)/; // 20020101にマッチするパターン
            res = reg.exec( s )
            if (res){
                return this.hasDate(res[1],res[2],res[3]);
            }
        }
        return false;
    },
    isTime:function(s){
        // 正規表現による書式チェック 
           
        var reg = /^(\d{1,2}):(\d{2})-?$/; // MM:SS にマッチするパターン
        var res = reg.exec( s )
        if (res){
            return ((res[1]>=0) && (res[1]<24) && (res[2]>=0) && (res[2]<60));
        }
        else {
            reg = /^(\d{1,2}):(\d{2})-(\d{1,2}):(\d{2}$)/; // MM:SS-MM:SS にマッチするパターン
            res = reg.exec( s )
            if (res){
                return (res[1]>=0 && res[1]<24 && res[2]>=0 && res[2]<60 && res[3]>=0 && res[3]<24 && res[4]>=0 && res[4]<60);
            }else{
                reg = /^-(\d{1,2}):(\d{2}$)/; // -MM:SS にマッチするパターン
                res = reg.exec( s )
                if ( res){
                    return (res[1]>=0 && res[1]<24 && res[2]>=0 && res[2]<60);
                }     
            }
        }

        return false;
    },
    getNendoYear:function(){
        var date=new Date();
        return date.getNendoYear();
    },
    getNendo:function(){
        return new Date(this.getNendoYear(),3,1);
    },
    timeToMinutes:function(time,def){
            //時間を分表示に
            
            if(time!=""){
                var ts=time.split(':');
                var v=(Number(ts[0]) * 60 + Number(ts[1]));
                return v;
            }
            return def;
                
    },
    minutesToTime:function(num){
            //時間をシリアル値に
            var m= num % 60;
            var h=Math.floor((num-m) / 60);
            if(m<10){
                m="0"+m;
            }
                    
            return h+':'+m;
                
    }

};

