• 请不要在回答技术问题时复制粘贴 AI 生成的内容
dofy
V2EX  ›  程序员

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

  •  1
     
  •   dofy ·
    dofy · Dec 30, 2015 · 4500 views
    This topic created in 3793 days ago, the information mentioned may be changed or developed.

    今天看到 这个帖子 中提到想要显示 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);
    
    Supplement 1  ·  Dec 31, 2015

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

    Supplement 2  ·  Dec 31, 2015

    version 0.1.3 处理附言部分时间

    8 replies    2016-01-09 17:28:01 +08:00
    px1981
        1
    px1981  
       Dec 30, 2015
    v5
    Orzpls
        2
    Orzpls  
       Dec 30, 2015 via Android
    顶一下,说不定用得上呢。
    sparrowMan
        3
    sparrowMan  
       Dec 30, 2015
    冲着动手能力 赞一个
    dofy
        4
    dofy  
    OP
       Dec 31, 2015 via iPhone
    @sparrowMan 哈哈 谢谢
    chywj7
        5
    chywj7  
       Dec 31, 2015
    越来越极客了
    GPU
        6
    GPU  
       Jan 9, 2016
    请问代码是否可以引用集成进 V2EX plus 扩展?
    dofy
        7
    dofy  
    OP
       Jan 9, 2016   ❤️ 1
    @GPU 没问题
    dofy
        8
    dofy  
    OP
       Jan 9, 2016   ❤️ 1
    @GPU 顺便说一句, V2EX plus 很棒 👍
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2649 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 124ms · UTC 15:36 · PVG 23:36 · LAX 08:36 · JFK 11:36
    ♥ Do have faith in what you're doing.