`
p2world
  • 浏览: 94248 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
收藏列表
标题 标签 来源
javascript date 简化类
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;
}());
Global site tag (gtag.js) - Google Analytics