今天看到 这个帖子 中提到想要显示 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);
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.