日期:2014-05-16  浏览次数:20503 次

javascript date 时间 简化类
用例:
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;
}());