Date.prototype.dateAfterDays=function(num){  
  if(typeof(num)!="number")   throw   new   Error("Date(num)参数为数值类型.",-1);  
  var date = this.valueOf();
  date += num*60*1000;
  return new Date(date);  
}

function DateUtil(){}
/**
*功能:格式化时间
*示例:DateUtil.Format("yyyy/MM/dd","Thu Nov 9 20:30:37 UTC+0800 2006 ");
*返回:2006/11/09
*/
DateUtil.dateAfterMins=function(num){
	var uom = new Date(new Date()-0+num*60000);
	alert(uom+"==="+uom.getFullYear());
	var ss = this.Format("yyyy/MM/dd hh:mm",uom);
	return ss; 
}
DateUtil.Format=function(fmtCode,date){
    var result,d,arr_d;
    
	var patrn_now_1=/^y{4}-M{2}-d{2}\sh{2}:m{2}:s{2}$/;
	var patrn_now_11=/^y{4}-M{1,2}-d{1,2}\sh{1,2}:m{1,2}:s{1,2}$/;
	
	var patrn_now_2=/^y{4}\/M{2}\/d{2}\sh{2}:m{2}:s{2}$/;
	var patrn_now_22=/^y{4}\/M{1,2}\/d{1,2}\sh{1,2}:m{1,2}:s{1,2}$/;
	
	var patrn_now_3=/^y{4}年M{2}月d{2}日\sh{2}时m{2}分s{2}秒$/;
	var patrn_now_33=/^y{4}年M{1,2}月d{1,2}日\sh{1,2}时m{1,2}分s{1,2}秒$/;
	var patrn_now_333=/^y{4}\/M{1,2}\/d{1,2}\sh{1,2}:m{1,2}:00$/;
	
	var patrn_date_1=/^y{4}-M{2}-d{2}$/;
	var patrn_date_11=/^y{4}-M{1,2}-d{1,2}$/;
	
	var patrn_date_2=/^y{4}\/M{2}\/d{2}$/;
	var patrn_date_22=/^y{4}\/M{1,2}\/d{1,2}$/;
	
	var patrn_date_3=/^y{4}年M{2}月d{2}日$/;
	var patrn_date_33=/^y{4}年M{1,2}月d{1,2}日$/;
	
    var patrn_time_1=/^h{2}:m{2}:s{2}$/;
	var patrn_time_11=/^h{1,2}:m{1,2}:s{1,2}$/;
	var patrn_time_2=/^h{2}时m{2}分s{2}秒$/;
	var patrn_time_22=/^h{1,2}时m{1,2}分s{1,2}秒$/;
	var patrn_time_3=/^h{1,2}$/;
	
	if(!fmtCode){fmtCode="yyyy/MM/dd hh:mm:ss";}
	
	if(date){
        d=new Date(date);
        if(isNaN(d)){
            //msgBox("时间参数非法\n正确的时间示例:Thu Nov 9 20:30:37 UTC+0800 2006");
            //Thu Jul 31 2008 11:49:28 GMT+0800 (CST)
            //Thu Nov 9 20:30:37 UTC+0800 2006
            return;}
    }else{
        d=new Date();
    }

    if(patrn_now_1.test(fmtCode))
    {
    	arr_d=splitDate(d,true);
        result=arr_d.yyyy+"-"+arr_d.MM+"-"+arr_d.dd+" "+arr_d.hh+":"+arr_d.mm+":"+arr_d.ss;
    }
    else if(patrn_now_11.test(fmtCode))
    {
    	arr_d=splitDate(d);
        result=arr_d.yyyy+"-"+arr_d.MM+"-"+arr_d.dd+" "+arr_d.hh+":"+arr_d.mm+":"+arr_d.ss;
    }
    else if(patrn_now_2.test(fmtCode))
    {
    	arr_d=splitDate(d,true);
        result=arr_d.yyyy+"/"+arr_d.MM+"/"+arr_d.dd+" "+arr_d.hh+":"+arr_d.mm+":"+arr_d.ss;
    }
    else if(patrn_now_22.test(fmtCode))
    {
    	arr_d=splitDate(d);
        result=arr_d.yyyy+"/"+arr_d.MM+"/"+arr_d.dd+" "+arr_d.hh+":"+arr_d.mm+":"+arr_d.ss;
    }
    else if(patrn_now_3.test(fmtCode))
    {
    	arr_d=splitDate(d,true);
        result=arr_d.yyyy+"年"+arr_d.MM+"月"+arr_d.dd+"日"+" "+arr_d.hh+"时"+arr_d.mm+"分"+arr_d.ss+"秒";
    }
    else if(patrn_now_33.test(fmtCode))
    {
    	arr_d=splitDate(d);
        result=arr_d.yyyy+"年"+arr_d.MM+"月"+arr_d.dd+"日"+" "+arr_d.hh+"时"+arr_d.mm+"分"+arr_d.ss+"秒";
    }
    else if(patrn_now_333.test(fmtCode))
    {
    	arr_d=splitDate(d);
        result=arr_d.yyyy+"/"+arr_d.MM+"/"+arr_d.dd+"/"+" "+arr_d.hh+":"+arr_d.mm+":00";
    }
    else if(patrn_date_1.test(fmtCode))
    {
    	arr_d=splitDate(d,true);
        result=arr_d.yyyy+"-"+arr_d.MM+"-"+arr_d.dd;
    }
    else if(patrn_date_11.test(fmtCode))
    {
    	arr_d=splitDate(d);
        result=arr_d.yyyy+"-"+arr_d.MM+"-"+arr_d.dd;
    }
    else if(patrn_date_2.test(fmtCode))
    {
    	arr_d=splitDate(d,true);
        result=arr_d.yyyy+"/"+arr_d.MM+"/"+arr_d.dd;
    }
    else if(patrn_date_22.test(fmtCode))
    {
    	arr_d=splitDate(d);
        result=arr_d.yyyy+"/"+arr_d.MM+"/"+arr_d.dd;
    }
    else if(patrn_date_3.test(fmtCode))
    {
    	arr_d=splitDate(d,true);
        result=arr_d.yyyy+"年"+arr_d.MM+"月"+arr_d.dd+"日";
    }
    else if(patrn_date_33.test(fmtCode))
    {
    	arr_d=splitDate(d);
        result=arr_d.yyyy+"年"+arr_d.MM+"月"+arr_d.dd+"日";
    }
    else if(patrn_time_1.test(fmtCode)){
        arr_d=splitDate(d,true);
        result=arr_d.hh+":"+arr_d.mm+":"+arr_d.ss;
    }
    else if(patrn_time_11.test(fmtCode)){
        arr_d=splitDate(d);
        result=arr_d.hh+":"+arr_d.mm+":"+arr_d.ss;
    }
    else if(patrn_time_2.test(fmtCode)){
        arr_d=splitDate(d,true);
        result=arr_d.hh+"时"+arr_d.mm+"分"+arr_d.ss+"秒";
    }
    else if(patrn_time_22.test(fmtCode)){
        arr_d=splitDate(d);
        result=arr_d.hh+"时"+arr_d.mm+"分"+arr_d.ss+"秒";
    }
    else if(patrn_time_3.test(fmtCode)){
        arr_d=splitDate(d);
        result=arr_d.hh;
    }
    else{
        msgBox("没有匹配的时间格式!");
        return;
    }
    
   return result;
};
function splitDate(d,isZero){
	var yyyy,MM,dd,hh,mm,ss;
	if(isZero){
		 yyyy=d.getFullYear();
    	 MM=(d.getMonth()+1)<10?"0"+(d.getMonth()+1):d.getMonth()+1;
    	 dd=d.getDate()<10?"0"+d.getDate():d.getDate();
    	 hh=d.getHours()<10?"0"+d.getHours():d.getHours();
    	 mm=d.getMinutes()<10?"0"+d.getMinutes():d.getMinutes();
    	 ss=d.getSeconds()<10?"0"+d.getSeconds():d.getSeconds();
    }else{
		 yyyy=d.getFullYear();
    	 MM=d.getMonth()+1;
    	 dd=d.getDate();
    	 hh=d.getHours();
    	 mm=d.getMinutes();
    	 ss=d.getSeconds();  
    }
    return {"yyyy":yyyy,"MM":MM,"dd":dd,"hh":hh,"mm":mm,"ss":ss};  
}
function msgBox(msg){
	window.alert(msg);
}


//除法函数，用来得到精确的除法结果 
//说明：javascript的除法结果会有误差，在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。 
//调用：accDiv(arg1,arg2) 
//返回值：arg1除以arg2的精确结果 

function accDiv(arg1,arg2){ 
	var t1=0,t2=0,r1,r2; 
	try{t1=arg1.toString().split(".")[1].length}catch(e){} 
	try{t2=arg2.toString().split(".")[1].length}catch(e){} 
	with(Math){ 
		r1=Number(arg1.toString().replace(".","")) 
		r2=Number(arg2.toString().replace(".","")) 
		return (r1/r2)*pow(10,t2-t1); 
	} 
} 
//给Number类型增加一个div方法，调用起来更加方便。 
Number.prototype.div = function (arg){ 
	return accDiv(this, arg); 
} 
//乘法函数，用来得到精确的乘法结果 
//说明：javascript的乘法结果会有误差，在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。 
//调用：accMul(arg1,arg2) 
//返回值：arg1乘以arg2的精确结果 
function accMul(arg1,arg2) 
{ 
	var m=0,s1=arg1.toString(),s2=arg2.toString(); 
	try{m+=s1.split(".")[1].length}catch(e){} 
	try{m+=s2.split(".")[1].length}catch(e){} 
	return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m) 
} 
//给Number类型增加一个mul方法，调用起来更加方便。 
Number.prototype.mul = function (arg){ 
	return accMul(arg, this); 
} 
//加法函数，用来得到精确的加法结果 
//说明：javascript的加法结果会有误差，在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。 
//调用：accAdd(arg1,arg2) 
//返回值：arg1加上arg2的精确结果 
function accAdd(arg1,arg2){ 
	var r1,r2,m; 
	try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0} 
	try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0} 
	m=Math.pow(10,Math.max(r1,r2)) 
	return (arg1*m+arg2*m)/m 
} 
//给Number类型增加一个add方法，调用起来更加方便。 
Number.prototype.add = function (arg){ 
	return accAdd(arg,this); 
}

//减法函数，用来得到精确的加法结果 
function Subtr(arg1,arg2){
     var r1,r2,m,n;
     try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
     try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
     m=Math.pow(10,Math.max(r1,r2));
     //last modify by deeka
     //动态控制精度长度
     n=(r1>=r2)?r1:r2;
     return ((arg1*m-arg2*m)/m).toFixed(n);
}