V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dofy
V2EX  ›  程序员

显示 V2EX 准确时间用户脚本( Mac OS X + Chrome + Tampermonkey 测试成功)

  •  1
     
  •   dofy ·
    dofy · 2015-12-30 17:50:49 +08:00 · 3549 次点击
    这是一个创建于 3252 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天看到 这个帖子 中提到想要显示 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);
    
    第 1 条附言  ·  2015-12-31 11:29:54 +08:00

    version 0.1.2 小更新,简化了一点点代码。

    第 2 条附言  ·  2015-12-31 11:44:23 +08:00

    version 0.1.3 处理附言部分时间

    8 条回复    2016-01-09 17:28:01 +08:00
    px1981
        1
    px1981  
       2015-12-30 18:06:50 +08:00
    v5
    Orzpls
        2
    Orzpls  
       2015-12-30 18:42:51 +08:00 via Android
    顶一下,说不定用得上呢。
    sparrowMan
        3
    sparrowMan  
       2015-12-30 22:01:41 +08:00
    冲着动手能力 赞一个
    dofy
        4
    dofy  
    OP
       2015-12-31 01:07:56 +08:00 via iPhone
    @sparrowMan 哈哈 谢谢
    chywj7
        5
    chywj7  
       2015-12-31 11:28:51 +08:00
    越来越极客了
    GPU
        6
    GPU  
       2016-01-09 08:32:19 +08:00
    请问代码是否可以引用集成进 V2EX plus 扩展?
    dofy
        7
    dofy  
    OP
       2016-01-09 17:26:50 +08:00   ❤️ 1
    @GPU 没问题
    dofy
        8
    dofy  
    OP
       2016-01-09 17:28:01 +08:00   ❤️ 1
    @GPU 顺便说一句, V2EX plus 很棒 👍
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3036 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:53 · PVG 21:53 · LAX 05:53 · JFK 08:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.