/**
* @desc VeryCD(TM) 动态更改时间格式
*
* 用到 prototype.js 的 document.getElementsByClassName
* 现已改用 YAHOO UI 了
*
* @usage
* 将页面中需要更改的时间用 包含
* 页面中时间格式为: 年/月/日 时:分:秒 或 年-月-日 时:分:秒
* 其中年为 4 位数字,其他都为 2 位数字,不足两位前面加 0 补全
* 并将该 JS 放在 body 的最后
*
*
* @author ApolloPY
*
* Copyright 2005 VeryCD Team and ApolloPY
* Some Rights Reserved
*/
function dynamicTime() {
/**
* 取当前客户端时区和服务器时区之差
* @return ms
*/
this.getTCOffset = function() {
var d, localTZ, offset;
var serverTZ = -480;// 服务器时区偏移值 分钟
d = new Date();
localTZ = d.getTimezoneOffset();// 客户机本地时区偏移值 分钟
offset = (serverTZ-localTZ)*60*1000;
return(offset);
}
/**
* 将 年/月/日 时:分:秒 或 年-月-日 时:分:秒 格式的时间转换成毫秒
* 返回的时间 时区是客户端的时区 默认服务器端的时区是+8
* @return ms
*/
this.getMsTime = function(timeString) {
var re, r, msTime, offset;
re = /(\d{4})[\/-](\d{2})[\/-](\d{2})\s(\d{2})\:(\d{2})\:(\d{2})/;
r = timeString.match(re);
if (r == null) {
return false;
}
msTime = Date.parse(r[2]+"/"+r[3]+"/"+r[1]+" "+r[4]+":"+r[5]+":"+r[6]);
offset = this.getTCOffset();// 取当前客户端时区和服务器时区之差
msTime += offset;
return(msTime);
}
/**
* 格式化时间
* @return str
*/
this.formatTime = function(timeSting, key) {
var SecMilli = 1000;// 秒
var MinMilli = SecMilli * 60;// 分
var HrMilli = MinMilli * 60;// 小时
var DyMilli = HrMilli * 24;// 天
// 输入的时间
var toMsTime = this.getMsTime(timeSting);
if (toMsTime == false) {
return timeSting;
}
var toTime = new Date(toMsTime);
// 当前时间
var now = new Date();
var localMsTime = now.getTime();
// 时间差
var offset = localMsTime - toMsTime;
// 格式
var forTime;
if ( Math.floor(offset / SecMilli) < 0 ) {
if ( Math.floor(offset / MinMilli) < -15 ) {
now.setHours(0, 0, 0, 0);
toTime.setHours(0, 0, 0, 0);
offset = now.getTime() - toTime.getTime();
offsetDy = Math.floor(offset / DyMilli);
toYear = toTime.getFullYear();
toMonth = toTime.getMonth() + 1;
toDay = toTime.getDate();
forTime = toYear + "/" + toMonth + "/" + toDay;
if (first ===1) arrayHour = arrayHour.concat(key);
} else {
forTime = "刚才";
if (first ===1) arraySecond = arraySecond.concat(key);
}
} else if ( Math.floor(offset / SecMilli) < 60 ) {
forTime = Math.floor(offset / SecMilli) + "秒前";
if (first ===1) arraySecond = arraySecond.concat(key);
} else if ( Math.floor(offset / MinMilli) < 60 ) {
forTime = Math.floor(offset / MinMilli) + "分钟前";
if (first ===1) arrayMinute = arrayMinute.concat(key);
} else if ( Math.floor(offset / HrMilli) < 24 ) {
forTime = Math.floor(offset / HrMilli) + "小时前";
if (first ===1) arrayHour = arrayHour.concat(key);
} else {
/////////////////////////////////////////////////
now.setHours(0, 0, 0, 0);
toTime.setHours(0, 0, 0, 0);
offset = now.getTime() - toTime.getTime();
offsetDy = Math.floor(offset / DyMilli);
toYear = toTime.getFullYear();
toMonth = toTime.getMonth() + 1;
toDay = toTime.getDate();
if ( offsetDy == 1 ) {
forTime = "昨天 ";
} else if ( offsetDy == 2 ) {
forTime = "前天 ";
} else if (now.getFullYear() == toYear) {
forTime = toMonth + "月" + toDay + "日";
} else {
forTime = toYear + "/" + toMonth + "/" + toDay;
}
}
return(forTime);
}
/**
* 遍历页面里的时间元素 调用 formatTime 更改时间格式
*
*/
this.updatePage = function(arrayKey) {
if (arrayKey.length) {
for (var k=0; k < arrayKey.length; k++) {
time[arrayKey[k]].innerHTML = this.formatTime(timeAll[arrayKey[k]], arrayKey[k]);
}
}
}
}
var time = getElementsByClassName('date-time');
if (time.length) {
var arraySecond = new Array();
var arrayMinute = new Array();
var arrayHour = new Array();
var timeAll = new Array();
var dynamicTime = new dynamicTime();
var first = 1;
for (var i=0; i < time.length; i++) {
timeAll[i] = time[i].innerHTML;
time[i].innerHTML = dynamicTime.formatTime(timeAll[i], i);
if (typeof time[i].title == 'undefined') {
time[i].title = timeAll[i];
}
}
first = 0;
if (arraySecond.length > 0) setInterval('dynamicTime.updatePage(arraySecond)', 1000);
if (arrayMinute.length > 0) setInterval('dynamicTime.updatePage(arrayMinute)', 60000);
if (arrayHour.length > 0) setInterval('dynamicTime.updatePage(arrayHour)', 3600000);
}