Javascript对日期的操作

javascript对日期处理的常用方法类

 

<script language="JavaScript">
<!--
//程序:常用公历日期处理程序
 /**//*用相对不规则的字符串来创建日期对象,不规则的含义为:顺序包含年月日三个数值串,有间隔*/
String.prototype.parseDate 
= function(){
    
var ar = (this + ",0,0,0").match(/\d+/g);
    
return ar[5]?(new Date(ar[0],ar[1]-1,ar[2],ar[3],ar[4],ar[5])):(new Date());
}

/**//*
 * 功能:根据输入表达式返回日期字符串
 * 参数:dateFmt:字符串,由以下结构组成    
 *      yy:长写年,YY:短写年mm:数字月,MM:英文月,dd:日,hh:时,
 *      mi:分,ss秒,ms:毫秒,we:汉字星期,WE:英文星期.
 *      isFmtWithZero : 是否用0进行格式化,true or false
 * 返回:对应日期的中文字符串
*/
Date.prototype.toString 
= function(dateFmt,isFmtWithZero){
    dateFmt 
= (dateFmt == null ? "yy-mm-dd hh:mi:ss" : dateFmt);
    
if(typeof(dateFmt) != "string" )
        
throw (new Error(-1'toString()方法的第一个参数为字符串类型!'));
    isFmtWithZero 
= !!isFmtWithZero;
    
var weekArr=[["","","","","","",""],["SUN","MON","TUR","WED","THU","FRI","SAT"]];
    
var monthArr=["JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"];
    
var str=dateFmt;
    
var o = {
        
"yy" : this.getFullYear(),
        
"YY" : this.getYear(),
        
"mm" : this.getMonth()+1,
        
"MM" : monthArr[this.getMonth()],
        
"dd" : this.getDate(),
        
"hh" : this.getHours(),
        
"mi" : this.getMinutes(),
        
"ss" : this.getSeconds(),
        
"we" : "星期" + weekArr[0][this.getDay()],
        
"WE" : weekArr[1][this.getDay()]
    }
    
for(var i in o){
        str 
= str.replace(new RegExp(i,"g"),o[i].toString().fmtWithZero(isFmtWithZero));
    }
    str 
= str.replace(/ms/g,this.getMilliseconds().toString().fmtWithZeroD(isFmtWithZero));
    
return str;
}
/**//*将一位数字格式化成两位,如: 9 to 09*/
String.prototype.fmtWithZero 
= function(isFmtWithZero){    
    
return (isFmtWithZero && /^\d$/.test(this))?"0"+this:this;
}
String.prototype.fmtWithZeroD 
= function(isFmtWithZero){    
    
return (isFmtWithZero && /^\d{2}$/.test(this))?"00"+this:((isFmtWithZero && /^\d$/.test(this))?"0"+this:this);
}

/**//* 功能 : 返回与某日期相距N天(N个24小时)的日期
 * 参数 : num number类型 可以为正负整数或者浮点数,默认为1;
 *        type 0(秒) or 1(天),默认为天
 * 返回 : 新的Date对象
 
*/
Date.prototype.dateAfter
=function(num,type){
    num 
= (num == null?1:num);
    
if(typeof(num)!="number"throw new Error(-1,"dateAfterDays(num,type)的num参数为数值类型.");
    type 
= (type==null?1:type);
    
var arr = [1000,86400000];
    
return new Date(this.valueOf() + num*arr[type]);
}

//判断是否是闰年,返回true 或者 false
Date.prototype.isLeapYear = function (){
    
var year = this.getFullYear();
    
return (0==year%4 && ((year % 100 != 0)||(year % 400 == 0)));
}

//返回该月天数
Date.prototype.getDaysOfMonth = function (){
    
return (new Date(this.getFullYear(),this.getMonth()+1,0)).getDate();
}

//日期比较函数,参数date:为Date类型,如this日期晚于参数:1,相等:0 早于: -1
Date.prototype.dateCompare = function(date){
    
if(typeof(date) != "object" || !(/Date/.test(date.constructor)))
         
throw new Error(-1,"dateCompare(date)的date参数为Date类型.");
    
var d = this.getTime() - date.getTime();
    
return d>0?1:(d==0?0:-1);
}

/**//*功能:返回两日期之差
 *参数:pd   PowerDate对象
 *    type: 返回类别标识.yy:年,mm:月,ww:周,dd:日,hh:小时,mi:分,ss:秒,ms:毫秒
 *    intOrFloat :返回整型还是浮点型值 0:整型,不等于0:浮点型
 *    output : 输出提示,如:时间差为#周!
 
*/
Date.prototype.calDateDistance 
= function (date,type,intOrFloat,output){
    
if(typeof(date) != "object" || !(/Date/.test(date.constructor)))
         
throw new Error(-1,"calDateDistance(date,type,intOrFloat)的date参数为Date类型.");
    type 
= (type==null?'dd':type);
    
if(!((new RegExp(type+",","g")).test("yy,mm,ww,dd,hh,mi,ss,ms,")))
         
throw new Error(-1,"calDateDistance(pd,type,intOrFloat,output)的type参数为非法.");
    
var iof = (intOrFloat==null?0:intOrFloat);
    
var num=0;
    
var o = {
        
"ww" : 7*86400000,
        
"dd" : 86400000,
        
"hh" : 3600000,
        
"mi" : 60000,
        
"ss" : 1000,
        
"ms" : 1
    }
    
switch(type){
        
case "yy": num = this.getFullYear() - date.getFullYear(); break;
        
case "mm": num = (this.getFullYear() - date.getFullYear())*12+this.getMonth()-date.getMonth(); break;
        
default
            
var sub = this.valueOf() - date.valueOf();
            
if (o[type])
                num 
= (sub/o[type]).fmtRtnVal(iof);
            break;
    }
    
return (output ? output.replace(/#/g," "+num+" ") : num);
}
//返回整数或者两位小数的浮点数
Number.prototype.fmtRtnVal = function (intOrFloat){
    
return (intOrFloat == 0 ? Math.floor(this) : parseInt(this*100)/100);
}
//根据当前日期所在年和周数返回周日的日期
Date.prototype.RtnByWeekNum = function (weekNum){
    
if(typeof(weekNum) != "number")
        
throw new Error(-1,"RtnByWeekNum(weekNum)的参数是数字类型.");
    
var date = new Date(this.getFullYear(),0,1);
    
var week = date.getDay();
    week 
= (week==0?7:week);
    
return date.dateAfter(weekNum*7-week,1);
}
//根据日期返回该日期所在年的周数
Date.prototype.getWeekNum = function (){
    
var dat = new Date(this.getFullYear(),0,1);
    
var week = dat.getDay();
    week 
= (week==0?7:week);
    
var days = this.calDateDistance(dat,"dd")+1;
    
return ((days + 6 - this.getDay() - 7 + week)/7);
}

//-->
</script>

<script language="JavaScript">
<!--
var dw = document.write;
var date2 = "2005-12-30".parseDate();
dw(date2,
"<br>");
var date3 = "2006-1-10 11 11 11".parseDate();
dw(date2.calDateDistance(date3,
null,null,"时间差为#天!"));
//alert(new Date(2000,2,-29));
//
-->
</script>

posted on 2009-02-16 11:29  冯岩  阅读(3609)  评论(1编辑  收藏  举报

导航