KiMoGiGi 技术文集

不在乎选择什么,而在乎坚持多久……

IT博客 首页 联系 聚合 管理
  185 Posts :: 14 Stories :: 48 Comments :: 0 Trackbacks

  /*用相对不规则的字符串来创建日期对象,不规则的含义为:顺序包含年月日三个数值串,有间隔*/  
  String.prototype.createDate   =   function(){  
          if(this   ==   "")   return   new   Date();  
  var   regThree   =   /^\D*(\d{2,4})\D+(\d{1,2})\D+(\d{1,2})\D*$/;  
  var   regSix   =   /^\D*(\d{2,4})\D+(\d{1,2})\D+(\d{1,2})\D+(\d{1,2})\D+(\d{1,2})\D+(\d{1,2})\D*$/;  
  var   str   =   "";  
  var   date   =   null;  
  if(regThree.test(this)){  
  str   =   this.replace(/\s/g,"").replace(regThree,"$1/$2/$3");  
  date   =   new   Date(str);  
  }  
  else   if(regSix.test(this)){  
  str   =   this.match(regSix);  
  date   =   new   Date(str[1],str[2]-1,str[3],str[4],str[5],str[6]);  
  }  
  if(isNaN(date)) return   new   Date();  
  else   return   date;  
  }  
   
  /*  
    *   功能:根据输入表达式返回日期字符串  
    *   参数:dateFmt:字符串,由以下结构组成          
    *             yy:长写年,YY:短写年mm:数字月,MM:英文月,dd:日,hh:时,  
    *             mi:分,ss秒,ms:毫秒,we:汉字星期,WE:英文星期.  
    *             isFmtWithZero   :   是否用0进行格式化,true   or   false  
  */  
  Date.prototype.parseString   =   function(dateFmt,isFmtWithZero){  
  dateFmt   =   (dateFmt   ==   null?"yy-mm-dd"   :   dateFmt);  
  isFmtWithZero   =   (isFmtWithZero   ==   null?true   :   isFmtWithZero);  
  if(typeof(dateFmt)   !=   "string"   )  
  throw   (new   Error(-1,   'parseString()方法需要字符串类型参数!'));  
  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;  
  str   =   str.replace(/yy/g,this.getFullYear());  
  str   =   str.replace(/YY/g,this.getYear());  
  str   =   str.replace(/mm/g,(this.getMonth()+1).toString().fmtWithZero(isFmtWithZero));  
  str   =   str.replace(/MM/g,monthArr[this.getMonth()]);  
  str   =   str.replace(/dd/g,this.getDate().toString().fmtWithZero(isFmtWithZero));  
  str   =   str.replace(/hh/g,this.getHours().toString().fmtWithZero(isFmtWithZero));  
  str   =   str.replace(/mi/g,this.getMinutes().toString().fmtWithZero(isFmtWithZero));  
  str   =   str.replace(/ss/g,this.getSeconds().toString().fmtWithZero(isFmtWithZero));  
  str   =   str.replace(/ms/g,this.getMilliseconds().toString().fmtWithZeroD(isFmtWithZero));  
  str   =   str.replace(/we/g,weekArr[0][this.getDay()]);  
  str   =   str.replace(/WE/g,weekArr[1][this.getDay()]);  
  return   str;  
  }  
  /*将一位数字格式化成两位,如:   9   to   09*/  
  String.prototype.fmtWithZero   =   function(isFmtWithZero){  
  if(isFmtWithZero)  
  return   (this<10?"0"+this:this);  
  else   return   this;  
  }  
  String.prototype.fmtWithZeroD   =   function(isFmtWithZero){  
  if(isFmtWithZero)  
  return   (this<10?"00"+this:(this<100?"0"+this:this));  
  else   return   this;  
  }  
   
  /*   功能   :   返回与某日期相距N天(N个24小时)的日期  
    *   参数   :   num   number类型   可以为正负整数或者浮点数,默认为1;  
    *                 type   0(秒)   or   1(天),默认为天  
    *   返回   :   新的PowerDate类型  
    */  
  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];  
  var   dd   =   this.valueOf();  
  dd   +=   num*arr[type];  
  return   new   Date(dd);  
  }  
   
  //判断是否是闰年,返回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.prototype.getChinaDate   =     function(){  
  var   year   =   this.getFullYear().toString();  
  var   month=   this.getMonth()+1;  
  var   day   =   this.getDate();  
  var   arrNum   =   ["零","一","二","三","四","五","六","七","八","九","十","十一","十二"];  
  var   strTmp="";  
  for(var   i=0,j=year.length;i<j;i++){  
  strTmp   +=   arrNum[year.charAt(i)];  
  }  
  strTmp   +=   "年";  
  strTmp   +=   arrNum[month]+"月";  
  if(day<10)  
  strTmp   +=   arrNum[day];  
  else   if   (day   <20)  
  strTmp   +=   "十"+arrNum[day-10];  
  else   if   (day   <30   )  
  strTmp   +=   "二十"+arrNum[day-20];  
  else    
  strTmp   +=   "三十"+arrNum[day-30];  
  strTmp   +=   "日";  
  return   strTmp;  
  }  
  //日期比较函数,参数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   miSecMain   =   this.valueOf();  
  var   miSecSub     =   date.valueOf();  
  var   num=0;  
  switch(type){  
  case   "yy":   num   =   this.getFullYear()   -   date.getFullYear();   break;  
  case   "mm":   num   =   (this.getFullYear()   -   date.getFullYear())*12+this.getMonth()-date.getMonth();   break;  
  case   "ww":   num   =   ((miSecMain-miSecSub)/7/86400000).fmtRtnVal(iof);   break;  
  case   "dd":   num   =   ((miSecMain-miSecSub)/86400000).fmtRtnVal(iof);   break;  
  case   "hh":   num   =   ((miSecMain-miSecSub)/3600000).fmtRtnVal(iof);   break;  
  case   "mi":   num   =   ((miSecMain-miSecSub)/60000).fmtRtnVal(iof);   break;  
  case   "ss":   num   =   ((miSecMain-miSecSub)/1000).fmtRtnVal(iof);   break;  
  case   "ms":   num   =   (miSecMain-miSecSub);break;  
  default:     break;  
  }  
  if(output)  
  return   output.replace(/#/g,"   "+num+"   ");  
  else   return   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);  
  }  
posted on 2007-01-18 22:17 KiMoGiGi 阅读(507) 评论(0)  编辑 收藏 引用 所属分类: JavaScript
只有注册用户登录后才能发表评论。