常用公历日期处理程序

常用公历日期处理程序
常用公历日期处理程序
< script language = " JavaScript " >
<!--
// 程序:常用公历日期处理程序
//
作者:梅雪香(meixx)
//
时间:忘了
/**/ /*用相对不规则的字符串来创建日期对象,不规则的含义为:顺序包含年月日三个数值串,有间隔*/
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 >

你可能感兴趣的:(常用公历日期处理程序)