`
毕竟红尘
  • 浏览: 12763 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

移花接木:嫁接Epoch Calendar

阅读更多
   早前,在搜集控件的时候,找到epoch calendar。那个时候登录epoch calendar的官方网站,发觉这东西竟然还是

收费的(不知道现在情况怎样)。本想收费的东西想必会有独到的地方,想不到把那份压缩过后的代码格式化后,浏

览察看代码后却还是比较失望的。代码写得不是很讨人喜欢。按我的习惯,不讨人喜欢的代码,如果api简洁强大,并

且性能好的话,我还是会考虑搜罗下来,以备后续不时之需。只不过在接着的试用中,出现的几个问题,却让我彻底

失望了。

     这个控件在使用的时候,有下面几个致命的问题:

   1.必须为每个需要时间控件的元素,创建一个calendar对象,calendar与元素绑定在一起。于是,在观察dom节点

的时候,会看到界面上有多少个需要calendar的元素,就会出现多少个calendar。epoch创建的calendar dom节点数量

还是比较多的,可能有几百个,消耗还是相当大的。

    在当代,ajax盛行的时候,如果动态创建的需要时间控件的元素很多的话,那么这些创建的calendar节点是会一

直存在的,甚至在时间元素节点销毁掉后,calendar的节点也不会释放。就比如,我朋友的项目中,就是用大量ajax

配合innerHTML来导航界面,这些请求回来的界面,每次在innerHTML的时候都需要重新创建calendar对象与元素绑定


  
   这点是效率问题。

   2.calendar的位置显示问题。这个问题的起因也是因为每个calendar的位置一开始就与元素绑定,在创建calendar

的时候直接根据元素初始位置计算出calendar的显示位置,之后如果绑定元素的位置发生变化(比如一个隐藏的div被

show出来,把元素的位置撑到另外的一个位置),那么点击元素的时候,calendar还是现实在初始位置,这样在视觉

上,就看不出与元素的当前位置相一致了。这点是可用性问题。


    基于上面的原因,我重新封装了epoch calendar,并提供更加简洁有效的api,使用方式如下所示:

  
 var calendar = new        GZITCalendar({calendarName:'global',lazy:true});
    calendar.bind('startDate','endDate','birthDay',...);


  完整的代码如下所示:

  

     ////////////封装的代码///////////////
function GZITCalendar(config) {
	this.calendarName = config.calendarName; // mandator
	this.lazy = config.lazy || false;

	if (!this.lazy) {
		this._createCalendar();
	}

}

GZITCalendar.prototype = {

	bind : function() {

		var instance = this;
		$A(arguments).each(function(ele) {

			if (ele && $(ele) && !$(ele).binded) {

				Event.observe($(ele), 'focus', instance._showCalendar
						.bindAsEventListener(instance, $(ele)));

				Event.observe($(ele), 'blur', instance._hideCalendar
						.bind(instance));

				$(ele).binded = true;// 避免重复绑定造成浪费

			}

		});

	},

	_hideCalendar : function(event, ele) {

		if (!this.delegationCalendar.mousein) {
			this.delegationCalendar.hide();
		}

	},

	// 显示或者关闭calendar
	_showCalendar : function(event, ele) {

		if (this.lazy) {
			this._createCalendar();
		}
		this._alignToEl(ele);

		// 显示出calendar的div
		this.delegationCalendar.show();

	},

	_createCalendar : function() {

		if (!this.delegationCalendar) {
			// create code...here
			this.delegationCalendar = new GZEpoch(this.calendarName);
			this.delegationCalendar.createCalendarEle();

		}

	},
	_alignToEl : function(ele) {

		this.delegationCalendar.initCurDay(ele);
		this.delegationCalendar.attachToElement(ele);

	}

}


//////////////epoch calendar的代码,部分重构/////////////////
function GZEpoch(name, mode, multiselect) {
	this.state = 0;
	this.name = name;

	this.mode = mode || 'popup';
	this.selectMultiple = (multiselect == true);
	this.curDate = new Date();
	this.selectedDates = new Array();
	this.calendar;
	this.calHeading;
	this.calCells;
	this.rows;
	this.cols;
	this.cells = new Array();
	this.monthSelect;
	this.yearSelect;
	this.mousein = false;
	this.calConfig();
	this.setDays();
	this.displayYear = this.displayYearInitial;
	this.displayMonth = this.displayMonthInitial;

};

// 创建出calendar节点
GZEpoch.prototype.createCalendarEle = function() {
	this.createCalendar();
	document.body.appendChild(this.calendar);

}

// 当前时间
GZEpoch.prototype.initCurDay = function(targetelement) {

	if (targetelement.value != '') {
		var dateStrs = targetelement.value.split("-");
		var initDate = new Date();
		initDate.setFullYear(dateStrs[0]);
		initDate.setMonth(dateStrs[1] - 1);
		initDate.setDate(dateStrs[2]);
		this.curDate = initDate;
	};

}

GZEpoch.prototype.attachToElement = function(targetelement) {

	if (targetelement && targetelement.type == 'text') {
		this.tgt = targetelement;
		this.calendar.style.position = 'absolute';
		this.topOffset = this.tgt.offsetHeight;
		this.leftOffset = 0;
		this.calendar.style.top = this.getTop(targetelement) + this.topOffset
				+ 'px';
		this.calendar.style.left = this.getLeft(targetelement)
				+ this.leftOffset + 'px';

		this.tgt.calendar = this;

	} else {
		this.container = targetelement;
		this.container.appendChild(this.calendar);
	};
	this.state = 2;

}

GZEpoch.prototype.calConfig = function() {
	this.displayYearInitial = this.curDate.getFullYear();
	this.displayMonthInitial = this.curDate.getMonth();
	this.rangeYearLower = 1900;
	this.rangeYearUpper = 2030;
	this.minDate = new Date(1900, 0, 1);
	this.maxDate = new Date(2030, 0, 1);
	this.startDay = 0;
	this.showWeeks = true;
	this.selCurMonthOnly = false;
	this.clearSelectedOnChange = true;
	switch (this.mode) {
		case 'popup' :
			this.visible = false;
			break;
		case 'flat' :
			this.visible = true;
			break;
	};
	this.setLang();
};
GZEpoch.prototype.setLang = function() {
	this.daylist = new Array('日', '一', '二', '三', '四', '五', '六', '日', '一', '二',
			'三', '四', '五', '六');
	this.months_sh = new Array('一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月',
			'九月', '十月', '十一月', '十二月');
	this.monthup_title = '下一月';
	this.monthdn_title = '上一月';
	this.clearbtn_caption = '取消';
	this.clearbtn_title = '取消';
	this.maxrange_caption = '超出最大值';
};
GZEpoch.prototype.getTop = function(element) {
	var oNode = element;
	var iTop = 0;
	while (oNode.tagName != 'BODY') {
		iTop += oNode.offsetTop;
		oNode = oNode.offsetParent;
	};
	return iTop;
};
GZEpoch.prototype.getLeft = function(element) {
	var oNode = element;
	var iLeft = 0;
	while (oNode.tagName != 'BODY') {
		iLeft += oNode.offsetLeft;
		oNode = oNode.offsetParent;
	};
	return iLeft;
};
GZEpoch.prototype.show = function() {
	this.calendar.style.display = 'block';
	this.visible = true;
};
GZEpoch.prototype.hide = function() {
	this.calendar.style.display = 'none';
	this.visible = false;
};
GZEpoch.prototype.toggle = function() {
	if (this.visible) {
		this.hide();
	} else {
		this.show();
	}
};
GZEpoch.prototype.setDays = function() {
	this.daynames = new Array();
	var j = 0;
	for (var i = this.startDay; i < this.startDay + 7; i++) {
		this.daynames[j++] = this.daylist[i];
	};
	this.monthDayCount = new Array(31, ((this.curDate.getFullYear() - 2000) % 4
			? 28
			: 29), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
};
GZEpoch.prototype.setClass = function(element, className) {
	element.setAttribute('class', className);
	element.setAttribute('className', className);
};
GZEpoch.prototype.createCalendar = function() {
	var tbody, tr, td;
	this.calendar = document.createElement('table');
	this.calendar.setAttribute('id', this.name + '_calendar');
	this.setClass(this.calendar, 'calendar');
	this.calendar.onselectstart = function() {
		return false;
	};
	this.calendar.ondrag = function() {
		return false;
	};
	tbody = document.createElement('tbody');
	tr = document.createElement('tr');
	td = document.createElement('td');
	td.appendChild(this.createMainHeading());
	tr.appendChild(td);
	tbody.appendChild(tr);
	tr = document.createElement('tr');
	td = document.createElement('td');
	td.appendChild(this.createDayHeading());
	tr.appendChild(td);
	tbody.appendChild(tr);
	tr = document.createElement('tr');
	td = document.createElement('td');
	td.setAttribute('id', this.name + '_cell_td');
	this.calCellContainer = td;
	td.appendChild(this.createCalCells());
	tr.appendChild(td);
	tbody.appendChild(tr);
	tr = document.createElement('tr');
	td = document.createElement('td');
	td.appendChild(this.createFooter());
	tr.appendChild(td);
	tbody.appendChild(tr);
	this.calendar.appendChild(tbody);
	this.calendar.owner = this;
	this.calendar.onmouseover = function() {
		this.owner.mousein = true;
	};
	this.calendar.onmouseout = function() {
		this.owner.mousein = false;
	};
};
GZEpoch.prototype.createMainHeading = function() {
	var container = document.createElement('div');
	container.setAttribute('id', this.name + '_mainheading');
	var bg_iframe = document.createElement('iframe');
	container.appendChild(bg_iframe);
	bg_iframe.setAttribute('id', 'bg');
	bg_iframe.setAttribute('frameBorder', '0px');
	this.setClass(container, 'mainheading');
	this.monthSelect = document.createElement('select');
	this.yearSelect = document.createElement('select');
	var monthDn = document.createElement('input'), monthUp = document
			.createElement('input');
	var opt, i;
	for (i = 0; i < 12; i++) {
		opt = document.createElement('option');
		opt.setAttribute('value', i);
		if (this.state == 0 && this.displayMonth == i) {
			opt.setAttribute('selected', 'selected');
		};
		opt.appendChild(document.createTextNode(this.months_sh[i]));
		this.monthSelect.appendChild(opt);
	};
	for (i = this.rangeYearLower; i <= this.rangeYearUpper; i++) {
		opt = document.createElement('option');
		opt.setAttribute('value', i);
		if (this.state == 0 && this.displayYear == i) {
			opt.setAttribute('selected', 'selected');
		};
		opt.appendChild(document.createTextNode(i));
		this.yearSelect.appendChild(opt);
	};
	monthUp.setAttribute('type', 'button');
	monthUp.setAttribute('value', '>');
	monthUp.setAttribute('title', this.monthup_title);
	monthDn.setAttribute('type', 'button');
	monthDn.setAttribute('value', '<');
	monthDn.setAttribute('title', this.monthdn_title);
	Element.addClassName(monthDn, "userbutton");
	Element.addClassName(monthUp, "userbutton");
	this.monthSelect.owner = this.yearSelect.owner = monthUp.owner = monthDn.owner = this;
	monthUp.onmouseup = function() {
		this.owner.nextMonth();
	};
	monthDn.onmouseup = function() {
		this.owner.prevMonth();
	};
	this.monthSelect.onchange = function() {
		this.owner.displayMonth = this.value;
		this.owner.displayYear = this.owner.yearSelect.value;
		this.owner.goToMonth(this.owner.displayYear, this.owner.displayMonth);
	};
	this.yearSelect.onchange = function() {
		this.owner.displayMonth = this.owner.monthSelect.value;
		this.owner.displayYear = this.value;
		this.owner.goToMonth(this.owner.displayYear, this.owner.displayMonth);
	};
	container.appendChild(monthDn);
	container.appendChild(this.monthSelect);
	container.appendChild(this.yearSelect);
	container.appendChild(monthUp);
	return container;
};
GZEpoch.prototype.createFooter = function() {
	var container = document.createElement('div');
	var clearSelected = document.createElement('input');
	clearSelected.setAttribute('type', 'button');
	clearSelected.setAttribute('value', this.clearbtn_caption);
	clearSelected.setAttribute('title', this.clearbtn_title);
	clearSelected.owner = this;
	clearSelected.onclick = function() {
		this.owner.resetSelections(false);
	};
	Element.addClassName(clearSelected, "userbutton");
	container.appendChild(clearSelected);
	return container;
};
GZEpoch.prototype.resetSelections = function(returnToDefaultMonth) {
	this.selectedDates = new Array();
	this.rows = new Array(false, false, false, false, false, false, false);
	this.cols = new Array(false, false, false, false, false, false, false);
	if (this.tgt) {
		if (this.mode == 'popup') {
			this.hide();
		}
	};
	if (returnToDefaultMonth == true) {
		this.goToMonth(this.displayYearInitial, this.displayMonthInitial);
	} else {
		this.reDraw();
	}
};
GZEpoch.prototype.createDayHeading = function() {
	this.calHeading = document.createElement('table');
	this.calHeading.setAttribute('id', this.name + '_caldayheading');
	this.setClass(this.calHeading, 'caldayheading');
	var tbody, tr, td;
	tbody = document.createElement('tbody');
	tr = document.createElement('tr');
	this.cols = new Array(false, false, false, false, false, false, false);
	if (this.showWeeks) {
		td = document.createElement('td');
		td.setAttribute('class', 'wkhead');
		td.setAttribute('className', 'wkhead');
		tr.appendChild(td);
	};
	for (var dow = 0; dow < 7; dow++) {
		td = document.createElement('td');
		td.appendChild(document.createTextNode(this.daynames[dow]));
		if (this.selectMultiple) {
			td.headObj = new CalHeading(this, td, (dow + this.startDay < 7
					? dow + this.startDay
					: dow + this.startDay - 7));
		};
		tr.appendChild(td);
	};
	tbody.appendChild(tr);
	this.calHeading.appendChild(tbody);
	return this.calHeading;
};
GZEpoch.prototype.createCalCells = function() {
	this.rows = new Array(false, false, false, false, false, false);
	this.cells = new Array();
	var row = -1, totalCells = (this.showWeeks ? 48 : 42);
	var beginDate = new Date(this.displayYear, this.displayMonth, 1);
	var endDate = new Date(this.displayYear, this.displayMonth,
			this.monthDayCount[this.displayMonth]);
	var sdt = new Date(beginDate);
	sdt.setDate(sdt.getDate() + (this.startDay - beginDate.getDay())
			- (this.startDay - beginDate.getDay() > 0 ? 7 : 0));
	this.calCells = document.createElement('table');
	this.calCells.setAttribute('id', this.name + '_calcells');
	this.setClass(this.calCells, 'calcells');
	var tbody, tr, td;
	tbody = document.createElement('tbody');
	for (var i = 0; i < totalCells; i++) {
		if (this.showWeeks) {
			if (i % 8 == 0) {
				row++;
				tr = document.createElement('tr');
				td = document.createElement('td');
				if (this.selectMultiple) {
					td.weekObj = new WeekHeading(this, td, sdt.getWeek(), row)
				} else {
					td.setAttribute('class', 'wkhead');
					td.setAttribute('className', 'wkhead');
				};
				td.appendChild(document.createTextNode(sdt.getWeek()));
				tr.appendChild(td);
				i++;
			}
		} else if (i % 7 == 0) {
			row++;
			tr = document.createElement('tr');
		};
		td = document.createElement('td');
		td.appendChild(document.createTextNode(sdt.getDate()));
		var cell = new CalCell(this, td, sdt, row);
		this.cells.push(cell);
		td.cellObj = cell;
		sdt.setDate(sdt.getDate() + 1);
		tr.appendChild(td);
		tbody.appendChild(tr);
	};
	this.calCells.appendChild(tbody);
	this.reDraw();
	return this.calCells;
};
GZEpoch.prototype.reDraw = function() {
	this.state = 1;
	var i, j;
	for (i = 0; i < this.cells.length; i++) {
		this.cells[i].selected = false;
	};
	for (i = 0; i < this.cells.length; i++) {
		for (j = 0; j < this.selectedDates.length; j++) {
			if (this.cells[i].date.getUeDay() == this.selectedDates[j]
					.getUeDay()) {
				this.cells[i].selected = true;
			}
		};
		this.cells[i].setClass();
	};
	this.state = 2;
};
GZEpoch.prototype.deleteCells = function() {
	this.calCellContainer.removeChild(this.calCellContainer.firstChild);
	this.cells = new Array();
};
GZEpoch.prototype.goToMonth = function(year, month) {
	this.monthSelect.value = this.displayMonth = month;
	this.yearSelect.value = this.displayYear = year;
	this.deleteCells();
	this.calCellContainer.appendChild(this.createCalCells());
};
GZEpoch.prototype.nextMonth = function() {
	if (this.monthSelect.value < 11) {
		this.monthSelect.value++;
	} else {
		if (this.yearSelect.value < this.rangeYearUpper) {
			this.monthSelect.value = 0;
			this.yearSelect.value++;
		} else {
			alert(this.maxrange_caption);
		}
	};
	this.displayMonth = this.monthSelect.value;
	this.displayYear = this.yearSelect.value;
	this.deleteCells();
	this.calCellContainer.appendChild(this.createCalCells());
};
GZEpoch.prototype.prevMonth = function() {
	if (this.monthSelect.value > 0)
		this.monthSelect.value--;
	else {
		if (this.yearSelect.value > this.rangeYearLower) {
			this.monthSelect.value = 11;
			this.yearSelect.value--;
		} else {
			alert(this.maxrange_caption);
		}
	};
	this.displayMonth = this.monthSelect.value;
	this.displayYear = this.yearSelect.value;
	this.deleteCells();
	this.calCellContainer.appendChild(this.createCalCells());
};
GZEpoch.prototype.addZero = function(vNumber) {
	return ((vNumber < 10) ? '0' : '') + vNumber;
};
GZEpoch.prototype.addDates = function(dates, redraw) {
	var j, in_sd;
	for (var i = 0; i < dates.length; i++) {
		in_sd = false;
		for (j = 0; j < this.selectedDates.length; j++) {
			if (dates[i].getUeDay() == this.selectedDates[j].getUeDay()) {
				in_sd = true;
				break;
			}
		};
		if (!in_sd) {
			this.selectedDates.push(dates[i]);
		}
	};
	if (redraw != false) {
		this.reDraw();
	}
};
GZEpoch.prototype.removeDates = function(dates, redraw) {
	var j;
	for (var i = 0; i < dates.length; i++) {
		for (j = 0; j < this.selectedDates.length; j++) {
			if (dates[i].getUeDay() == this.selectedDates[j].getUeDay()) {
				this.selectedDates.splice(j, 1);
			}
		}
	};
	if (redraw != false) {
		this.reDraw();
	}
};
GZEpoch.prototype.outputDate = function(vDate, vFormat) {
	var vDay = this.addZero(vDate.getDate());
	var vMonth = this.addZero(vDate.getMonth() + 1);
	var vYearLong = this.addZero(vDate.getFullYear());
	var vYearShort = this.addZero(vDate.getFullYear().toString()
			.substring(3, 4));
	var vYear = (vFormat.indexOf('yyyy') > -1 ? vYearLong : vYearShort);
	var vHour = this.addZero(vDate.getHours());
	var vMinute = this.addZero(vDate.getMinutes());
	var vSecond = this.addZero(vDate.getSeconds());
	return vFormat.replace(/dd/g, vDay).replace(/mm/g, vMonth).replace(
			/y{1,4};/g, vYear).replace(/hh/g, vHour).replace(/nn/g, vMinute)
			.replace(/ss/g, vSecond);
};
GZEpoch.prototype.updatePos = function(target) {
	this.calendar.style.top = this.getTop(target) + this.topOffset + 'px'
	this.calendar.style.left = this.getLeft(target) + this.leftOffset + 'px'
};
function CalHeading(owner, tableCell, dow) {
	this.owner = owner;
	this.tableCell = tableCell;
	this.dayOfWeek = dow;
	this.tableCell.onclick = this.onclick;
};
CalHeading.prototype.onclick = function() {
	var owner = this.headObj.owner;
	var sdates = owner.selectedDates;
	var cells = owner.cells;
	owner.cols[this.headObj.dayOfWeek] = !owner.cols[this.headObj.dayOfWeek];
	for (var i = 0; i < cells.length; i++) {
		if (cells[i].dayOfWeek == this.headObj.dayOfWeek
				&& (!owner.selCurMonthOnly || cells[i].date.getMonth() == owner.displayMonth
						&& cells[i].date.getFullYear() == owner.displayYear)) {
			if (owner.cols[this.headObj.dayOfWeek]) {
				if (owner.selectedDates.arrayIndex(cells[i].date) == -1) {
					sdates.push(cells[i].date);
				}
			} else {
				for (var j = 0; j < sdates.length; j++) {
					if (cells[i].dayOfWeek == sdates[j].getDay()) {
						sdates.splice(j, 1);
						break;
					}
				}
			};
			cells[i].selected = owner.cols[this.headObj.dayOfWeek];
		}
	};
	owner.reDraw();
};
function WeekHeading(owner, tableCell, week, row) {
	this.owner = owner;
	this.tableCell = tableCell;
	this.week = week;
	this.tableRow = row;
	this.tableCell.setAttribute('class', 'wkhead');
	this.tableCell.setAttribute('className', 'wkhead');
	this.tableCell.onclick = this.onclick;
};
WeekHeading.prototype.onclick = function() {
	var owner = this.weekObj.owner;
	var cells = owner.cells;
	var sdates = owner.selectedDates;
	var i, j;
	owner.rows[this.weekObj.tableRow] = !owner.rows[this.weekObj.tableRow];
	for (i = 0; i < cells.length; i++) {
		if (cells[i].tableRow == this.weekObj.tableRow) {
			if (owner.rows[this.weekObj.tableRow]
					&& (!owner.selCurMonthOnly || cells[i].date.getMonth() == owner.displayMonth
							&& cells[i].date.getFullYear() == owner.displayYear)) {
				if (owner.selectedDates.arrayIndex(cells[i].date) == -1) {
					sdates.push(cells[i].date);
				}
			} else {
				for (j = 0; j < sdates.length; j++) {
					if (sdates[j].getTime() == cells[i].date.getTime()) {
						sdates.splice(j, 1);
						break;
					}
				}
			}
		}
	};
	owner.reDraw();
};
function CalCell(owner, tableCell, dateObj, row) {
	this.owner = owner;
	this.tableCell = tableCell;
	this.cellClass;
	this.selected = false;
	this.date = new Date(dateObj);
	this.dayOfWeek = this.date.getDay();
	this.week = this.date.getWeek();
	this.tableRow = row;
	this.tableCell.onclick = this.onclick;
	this.tableCell.onmouseover = this.onmouseover;
	this.tableCell.onmouseout = this.onmouseout;
	this.setClass();
};
CalCell.prototype.onmouseover = function() {
	this.setAttribute('class', this.cellClass + ' hover');
	this.setAttribute('className', this.cellClass + ' hover');
};
CalCell.prototype.onmouseout = function() {
	this.cellObj.setClass();
};
CalCell.prototype.onclick = function() {
	var cell = this.cellObj;
	var owner = cell.owner;
	if (!owner.selCurMonthOnly || cell.date.getMonth() == owner.displayMonth
			&& cell.date.getFullYear() == owner.displayYear) {
		if (owner.selectMultiple == true) {
			if (!cell.selected) {
				if (owner.selectedDates.arrayIndex(cell.date) == -1) {
					owner.selectedDates.push(cell.date);
				}
			} else {
				var tmp = owner.selectedDates;
				for (var i = 0; i < tmp.length; i++) {
					if (tmp[i].getUeDay() == cell.date.getUeDay()) {
						tmp.splice(i, 1);
					}
				}
			}
		} else {
			owner.selectedDates = new Array(cell.date);
			if (owner.tgt) {
				owner.tgt.value = owner.selectedDates[0].dateFormat();
				if (owner.mode == 'popup') {
					owner.hide();
				}
			}
		};
		owner.reDraw();
	}
};
CalCell.prototype.setClass = function() {
	if (this.selected) {
		this.cellClass = 'cell_selected';
	} else if (this.owner.displayMonth != this.date.getMonth()) {
		this.cellClass = 'notmnth';
	} else if (this.date.getDay() > 0 && this.date.getDay() < 6) {
		this.cellClass = 'wkday';
	} else {
		this.cellClass = 'wkend';
	};
	if (this.date.getFullYear() == this.owner.curDate.getFullYear()
			&& this.date.getMonth() == this.owner.curDate.getMonth()
			&& this.date.getDate() == this.owner.curDate.getDate()) {
		this.cellClass = this.cellClass + ' curdate';
	};
	this.tableCell.setAttribute('class', this.cellClass);
	this.tableCell.setAttribute('className', this.cellClass);
};
Date.prototype.getDayOfYear = function() {
	return parseInt((this.getTime() - new Date(this.getFullYear(), 0, 1)
			.getTime())
			/ 86400000 + 1);
};
Date.prototype.getWeek = function() {
	return parseInt((this.getTime() - new Date(this.getFullYear(), 0, 1)
			.getTime())
			/ 604800000 + 1);
};
Date.prototype.getUeDay = function() {
	return parseInt(Math.floor((this.getTime() - this.getTimezoneOffset()
			* 60000)
			/ 86400000));
};
Date.prototype.dateFormat = function(format) {
	if (!format) {
		format = 'Y-m-d';
	};
	LZ = function(x) {
		return (x < 0 || x > 9 ? '' : '0') + x
	};
	var MONTH_NAMES = new Array('一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月',
			'九月', '十月', '十一月', '十二月', '一月', '二月', '三月', '四月', '五月', '六月', '七月',
			'八月', '九月', '十月', '十一月', '十二月');
	var DAY_NAMES = new Array('日', '一', '二', '三', '四', '五', '六', '日', '一', '二',
			'三', '四', '五', '六');
	format = format + "";
	var result = "";
	var i_format = 0;
	var c = "";
	var token = "";
	var y = this.getFullYear().toString();
	var M = this.getMonth() + 1;
	var d = this.getDate();
	var E = this.getDay();
	var H = this.getHours();
	var m = this.getMinutes();
	var s = this.getSeconds();
	var yyyy, yy, MMM, MM, dd, hh, h, mm, ss, ampm, HH, H, KK, K, kk, k;
	var value = new Object();
	value['Y'] = y.toString();
	value['y'] = y.substring(2);
	value['n'] = M;
	value['m'] = LZ(M);
	value['F'] = MONTH_NAMES[M - 1];
	value['M'] = MONTH_NAMES[M + 11];
	value['j'] = d;
	value['d'] = LZ(d);
	value['D'] = DAY_NAMES[E + 7];
	value['l'] = DAY_NAMES[E];
	value['G'] = H;
	value['H'] = LZ(H);
	if (H == 0) {
		value['g'] = 12;
	} else if (H > 12) {
		value['g'] = H - 12;
	} else {
		value['g'] = H;
	};
	value['h'] = LZ(value['g']);
	if (H > 11) {
		value['a'] = 'pm';
		value['A'] = 'PM';
	} else {
		value['a'] = 'am';
		value['A'] = 'AM';
	};
	value['i'] = LZ(m);
	value['s'] = LZ(s);
	while (i_format < format.length) {
		c = format.charAt(i_format);
		token = "";
		while ((format.charAt(i_format) == c) && (i_format < format.length)) {
			token += format.charAt(i_format++);
		};
		if (value[token] != null) {
			result = result + value[token];
		} else {
			result = result + token;
		}
	};
	return result;
};
Array.prototype.arrayIndex = function(searchVal, startIndex) {
	startIndex = (startIndex != null ? startIndex : 0);
	for (var i = startIndex; i < this.length; i++) {
		if (searchVal == this[i]) {
			return i;
		}
	};
	return -1;
};



  


 








  
   
   
   


  


   

   
分享到:
评论

相关推荐

    Epoch_MysterBriefcase:DayZ Epoch mod 的神秘公文包插件

    Epoch mod 的神秘公文包插件版本 1.1 有关讨论和演示视频,请访问此处: ##Features Mystery Briefcase 是一个简单的插件脚本,可将原本完全无用的物品变成有奖公文包。 您获得公文包,右键单击它,选择打开,您将...

    epoch-ladder:Last Epoch阶梯的替代视图,突出显示类和技能受欢迎程度

    标题中的“epoch-ladder”似乎是一个项目或者框架的名称,它提供了一种新的视角来查看“Last Epoch”,可能是一个游戏或者训练系统,其中包含了类(classes)和技能(skills)的流行度分析。"Last Epoch"通常指的是...

    a3-eposql:A3 Epoch的服务器mod,允许使用MySQL代替Redis

    A3 Epoch的服务器mod,允许使用MySQL代替Redis。 从数据库检索数据后,数据将保留在内存中,并且仅在服务器将数据发送到扩展名时才更新。 这意味着,如果他们在当前服务器会话期间登录了播放器数据,则无法编辑...

    javascript图表库Epoch.zip

    Epoch 是一个通用的实时的图表库,用于构建漂亮、平滑和高性能的可视化图形图表。Epoch 提供多种基本图表和专业图表。Epoch 依赖于 jQuery 和 D3。使用: 标签:Epoch

    A3_EPOCH_Headless_Client:Arma 3 Epoch 使用的无头客户端设置

    Arma 3: Epoch Mod - 无头客户端这些文件用于在 [Arma 3: Epoch Mod]( ) 中设置无头客户端,并且应该以最少的编辑工作。 我为创建此设置而编写的教程可以在官方论坛上找到( )。 ####简短回顾将此行添加到您的...

    Epoch GisServer User Guide

    ### Epoch GIS Server 用户指南 #### 重要知识点概览 **标题与描述:** "Epoch GisServer User Guide",这表明文档是针对Epoch GIS Server软件的用户指南。 **标签:** 同样标注为 "Epoch GisServer User Guide...

    VAE:使用 Theano 块的变分自动编码器示例

    epoch_interrupt_received: False epoch_started: False epochs_done: 1000 iterations_done: 60000 received_first_batch: True training_started: True Log records from the iteration 60000:

    基于 Unet3+ 项目、自适应多尺度训练、多类别分割:ISIC皮肤病语义分割【包含数据和代码、训练结果】

    [epoch: 100] global correct: 0.9507 Precision: ['0.9664', '0.9111'] Recall: ['0.9650', '0.9144'] F1 score: ['0.9657', '0.9127'] Dice: ['0.9657', '0.9127'] IoU: ['0.9336', '0.8394'] mean precision: 0....

    epoch_user-4.17_粒子模拟说明文档_

    "epoch_user-4.17_粒子模拟说明文档_" 提供的是一个关于三维粒子模拟程序的详细指南,帮助用户理解和操作该系统,以创建出逼真的动态效果,如等立体状态灯的模拟。 粒子系统是由大量独立或相互作用的微观对象(粒子...

    图像超分辨率SRGAN的Pytorch版本复现代码,注释详细,含训练曲线图绘制、最优PSNR的模型权重文件(x2、x4、x8)

    epochs:保存训练过程中每个epoch的模型文件 statistics:存放训练和测试的评估指标结果 training_results:存放每一轮验证集的超分结果对比,每张图像5行3列展示 data_utils.py:数据预处理和制作数据集 demo.py:...

    基于UNet3+实现的ISIC皮肤病语义分割项目

    [epoch: 100] global correct: 0.9507 Precision: ['0.9664', '0.9111'] Recall: ['0.9650', '0.9144'] F1 score: ['0.9657', '0.9127'] Dice: ['0.9657', '0.9127'] IoU: ['0.9336', '0.8394'] mean precision: 0....

    sieste:Vaultaire 的 REST 接口

    /interpolated/{origin}/{address} 显示从检索的内插值,可用选项有: address :来源的唯一标识符(在来源内) start : unix epoch 开始搜索,在此之前不会返回任何值。 end : unix epoch 用于搜索结束,此后不会...

    S3mper.zip

    S3mper 是通过一致的,二级索引对亚马逊 S3 索引做... epoch deleted dir linkPath linkFile //&lt;bucket&gt;/ N/A N/A epoch[^2] N/A N/A N/A //&lt;bucket&gt;/ 标签:S3mper

    VehicleGarage:Arma 2 Epoch 的虚拟车辆存储

    Arma 2 Epoch 的虚拟车辆存储 由 0verHeat 创建 注意:此脚本仅在您将所有者 ID 设置为车库建筑时才有效(参见 Plot 4 Life) 安装 0. 基础 将车库文件夹粘贴到您的任务文件中。 不要忘记将此添加到您的自定义 ...

    Keras 中的批量重归一化算法实现_python_代码_下载

    Keras 2.0+ 中的批量重规范化算法实现 用法 将batch_renorm.py脚本...批量重归一化(模式 0):每个 epoch 152 秒。 批量重归一化(模式 2):每个 epoch 142 秒。 更多详情、使用方法,请下载后阅读README.md文件

    EPOCH安装教程(官方提供)

    EPOCHS(Electric Power and Communication Synchronizing Simulator)是一款结合了多个仿真系统的联邦仿真环境,它将加州大学伯克利分校的网络仿真器NS2、通用电气的PSLF机电暂态仿真系统以及曼尼托巴大学的PSCAD...

    dayz-epoch-linux-server-magic:Linux Dayz Epoch服务器安装程序

    自动DayZ Epoch Linux服务器魔术安装程序当前时代版本: 1.0.5.1 当前的Arma 2 AO服务器引擎: 1.63.126652 (截至2014-09-03) 当前的Arma 2 AO beta版数据文件: 1.63.122548这是什么? 这是Dayz Epoch游戏服务器...

    DayZ-Epoch, 用于 Arma 2的实验 DayZ.zip

    DayZ-Epoch, 用于 Arma 2的实验 DayZ DayZ实验 DayZ modhttp://dayzepoch.com基于DayZ的社区版https://github.com/DayZMod/DayZ/blob/1.8.8/Documentation/Credits.md ht

    MobileUnet 对Liver分割实战代码

    epoch:100 precision: ['0.9846', '0.9590'] recall: ['0.9958', '0.8642'] iou: ['0.9805', '0.8334'] dice: ['0.9901', '0.9092'] mean precision: 0.9718,mean recall: 0.9300,mean dice: 0.9497,mean iou: 0....

Global site tag (gtag.js) - Google Analytics