常见公历日期操作

<script language="JavaScript">
<!--
/*用相对不规则的字符串来创建日期对象,不规则的含义为:顺序包含年月日三个数值串,有间隔*/
String.prototype.parseDate = function(){
 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))
  date = new Date(this.replace(//s/g,"").replace(regThree,"$1/$2/$3"));
 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]);
 }else return new Date();
 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;
 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(天),默认为天
 * 返回 : 新的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];
 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 date1 = "2005-11-1";
var date3 = "2006-1-10 11 11 11".parseDate();
var date2 = "2005-12-30".parseDate();
//alert(date3);
alert(date3.calDateDistance(date2,null,null,"时间差为#天!"));

//-->
</script>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值