今天看到 这个帖子 中提到想要显示 V2EX 的准确时间,觉得是个不错的想法,然后看了下页面源码,发现源码中并没有帖子准确时间的数据。
回复中 @px1981 提到一个虽不精确(没有时间数据无法做到绝对精确)但还算靠谱的方案。
于是写了个用户脚本,在 Mac OS X + Chrome + Tampermonkey 下测试成功。
Gist 地址
https://gist.github.com/dofy/38c8d67405a5597f4e7e
源码
// ==UserScript==
// @name V2EX 绝对时间
// @namespace http://phpz.org/
// @version 0.1
// @description 显示 V2EX 中的绝对时间
// @author Seven Yu
// @match *.v2ex.com/*
// @grant none
// ==/UserScript==
/* jshint -W097 */
'use strict';
(function(win, doc, $) {
// 检测列表
var classList = [
'.header .gray', // 楼主时间
'.cell .small', // 列表时间
'.inner .small', // 最后一条
'.dock_area .fade', // 个人主页回复列表
'.cell .snow' // 系统提醒
];
// 时间正则
/*
* RegExp.exec() 返回结构说明
* 0: 匹配的时间文本
* 1: 天数
* 2: 小时数
* 3: 分钟数
*/
var dateReg = /(?:(\d+)\s*天前)|(?:(?:(\d+)\s*小时\s*)?(\d+)\s*分钟前)|(?:几秒前|刚刚)/g;
// 之行检查和替换
for(var ind in classList) {
$(classList[ind]).each(function(index, item) {
var showDate, itemContent, matchArray;
item = $(item);
dateReg.lastIndex = 0;
itemContent = item.html();
matchArray = dateReg.exec(itemContent);
showDate = realDate(matchArray);
if(showDate) {
//item.css('background-color', 'red');
item.html(itemContent.replace(matchArray[0], showDate));
}
});
}
/**
* 获取绝对时间
*/
function realDate(matchArray) {
if(!matchArray)
return false;
var now = new Date(),
nowHour = now.getHours(),
dayNum = parseInt(matchArray[1] || 0, 10),
hourNum = parseInt(matchArray[2] || 0, 10),
minuteNum = parseInt(matchArray[3] || 0, 10),
itemNow, resultDate, resultTime;
now -= dayNum * 24 * 60 * 60 * 1000;
now -= hourNum * 60 * 60 * 1000;
now -= minuteNum * 60 * 1000;
itemNow = new Date(now);
resultDate = [itemNow.getFullYear(), itemNow.getMonth() + 1, itemNow.getDate()].join('-');
resultTime = [fixZero(itemNow.getHours()), fixZero(itemNow.getMinutes())].join(':');
if(dayNum > 0) {
return resultDate;
} else {
if(hourNum >= nowHour) {
return [resultDate, resultTime].join(' ');
} else {
return resultTime;
}
}
}
/**
* 数字补零
*/
function fixZero(num) {
return num > 9 ? num : '0' + num;
}
})(window, document, window.jQuery);
version 0.1.2
小更新,简化了一点点代码。
version 0.1.3
处理附言部分时间
1
px1981 2015-12-30 18:06:50 +08:00
v5
|
2
Orzpls 2015-12-30 18:42:51 +08:00 via Android
顶一下,说不定用得上呢。
|
3
sparrowMan 2015-12-30 22:01:41 +08:00
冲着动手能力 赞一个
|
4
dofy OP @sparrowMan 哈哈 谢谢
|
5
chywj7 2015-12-31 11:28:51 +08:00
越来越极客了
|
6
GPU 2016-01-09 08:32:19 +08:00
请问代码是否可以引用集成进 V2EX plus 扩展?
|