日期:2014-05-16 浏览次数:20508 次
var iDate=new IDate(); iDate.toString();//y-M-d h:m:s格式输出 iDate.h("+1");//小时加一 iDate.h("-1");//小时减一 iDate.h(1); //设定小时为1 iDate.h("1");//设定小时为1 iDate.h(); //获取小时数 iDate.y(2012).M(4).d(14).h(10).m(0).s(0).ms(0);//链式
var IDate=(function(){ var self,//当前操作的IDate实例,实现静态方法、访问控制 names={//原生Date类与本类方法名对应列表 y:"FullYear", M:"Month", d:"Date", h:"Hours", m:"Minutes", s:"Seconds", ms:"Milliseconds" }; function argParse(k,arg){ var res; if(arguments.length){ if(typeof arg ==="number"){ set(k,arg);//内部方法调用,不使用self return self; }else if(typeof arg ==="string"){ if(/^[+-]?\d+$/.test(arg)){ var dir; if(arg.charAt(0)==="+"){ arg=parseInt(arg,10); dir=1; }else if(arg.charAt(0)==="-"){ arg=parseInt(arg.slice(1),10); dir=-1; } set(k,arg,dir); return self; } } } return get(k); } function set(k,v,dir){ var dateName=names[k]; if(!dir){ if(k==="M"){ v--; } self.date['set'+dateName](v);//访问暴露在外的属性使用self }else{ self.date['set'+dateName](v*dir+self.date["get"+dateName]()); } } function get(k){ var res=self.date['get'+names[k]](); if(k==="M"){ res++; } return res; } function IDate(date){ if(arguments.length){ if(date instanceof IDate){//防止重复实例化,复制使用:new IDate(iDate.t()); return date; }else if(date instanceof Date){ this.date=date; }else{ this.date=new Date(parseInt(date,10)); } }else{ this.date=new Date(); } } //批量生成外部使用方法: var proto={}; for(var name in names){ proto[name]=(function(name){ return function(arg){ self=this; return argParse(name,arg); }; }(name)); } proto.t=function() { return this.date.getTime(); }; proto.toString=function() { return this.y()+"-"+this.M()+"-"+this.d()+" "+this.h()+":"+this.m()+":"+this.s(); }; IDate.prototype=proto; return IDate; }());