2023年政策修订增补工作正在进行中,欢迎参与!

Help:以本地时区显示签名时间

萌娘百科,万物皆可萌的百科全书!转载请标注来源页面的网页链接,并声明引自萌娘百科。内容不可商用。
跳转到导航 跳转到搜索
Circle-icons-tools-light blue.svg
这个页面“Help:以本地时区显示签名时间”是萌娘百科的小工具说明文档

“以本地时区显示签名时间”小工具是用来对讨论页的时间戳进行重新格式化以便在适当的时候使用相对日期和时间格式的组合。

该工具引自enwp:User:Mxn/CommentsInLocalTime,其作者对原来的enwp:Wikipedia:Comments in Local Time进行了重构,在保持功能一致的情况下提供更大的自由度和更简易的本地化方式。

萌百对该版本进行了修改,以适应萌百环境。

功能

该工具会对所有的合适的页面上的时间戳进行替换,默认对所有讨论页类页面启用

  • 近期的时间戳会被替换成相对时间,如“今天上午 10:14(UTC+8)”;
  • 距离较远的时间会被替换成绝对时间+相对时间,如“2018年01月29日 星期一 (2年0个月0天前) 晚上 11:52(UTC+8)”;
  • 可以把鼠标放置在被替换的时间上以查看完整的时间戳(zhwp:ISO 8601格式)。

替换后的文本会随时间推移自动更新。显示的语言格式中由代码指定的部分会 暂时 仅提供简体中文,由 Moment.js 提供的部分会根据你的界面语言变化。

与英语维基的版本的差异点

默认解析的名字空间的不同

萌百版本更改了默认解析的名字空间,以仅在讨论名字空间启用。

解析方式的不同

萌百版本改写了默认的解析正则表达式以支持解析中文和日语的时间戳格式,并据此修正了解析函数以支持CST、JST和UTC格式时区。该修正摒弃了需要用户手动在设置中指定utcOffset来按照用户所在时区显示时间的不便之处[1]

tooltipFormats

萌百版本给tooltipFormats所使用的函数追加了第二个参数,该参数的值为被解析的时间戳原本的文字内容,方便对照,详见#输出格式

向后兼容

萌百版本追加了一项配置twentyFourHours以兼容原有的版本的此项配置,该项配置可以从mw.config.get("LocalComments", {})读取。

萌百版本改写了默认的输出方式以贴近原有的版本的表现样式:

以2020年1月31日 (五) 22:17 (CST)为例的效果体现
原始时间戳 替换后的时间戳
2018年1月29日 (三) 22:17 (CST) 2018年01月29日 星期一 (2年0个月2天前) 晚上 10:17(UTC+8)
2019年1月25日 (六) 22:17 (CST) 2019年01月25日 星期五 (1年0个月6天前) 晚上 10:17(UTC+8)
2020年1月25日 (六) 22:17 (CST) 2020年01月25日 星期六 (6天前) 晚上 10:17(UTC+8)
2020年1月29日 (三) 22:17 (CST) 2020年01月29日 星期三 (2天前) 晚上 10:17(UTC+8)
2020年1月30日 (四) 22:17 (CST) 昨天晚上 10:17(UTC+8)
2020年2月1日 (四) 22:17 (CST) 明天晚上 10:17(UTC+8)

安装方法

Special:参数设置#mw-prefsection-gadgets中启用【以本地時區顯示簽名時間】小工具即可。

用户自定义方式

可以在用户页的代码页面中通过定义顶级变量域变量LocalComments来配置本工具,这需要用户有基本的 HTML 和 JavaScript 技能。样例如下:

window.LocalComments = $.extend(window.LocalComments || {}, {
    tooltipFormats: [
        function(_, originalText) { return "原始时间戳:" + originalText; },
        "[年月日星时:]LLLL",
        "[ISO 8601:]YYYY-MM-DDTHH:mmZ",
    ],
});

为了实现向后兼容,我们追加了一项配置twentyFourHours以兼容原有的版本的此项配置。

该项配置可以通过mw.config.set("LocalComments", { twentyFourHours: true })方式配置,但此种做法不被推荐并可能在将来被移除。

配置解释

本工具依赖于 Moment.js 来处理日期计算和文本显示。几乎大部分配置都会直接传递给该库。

选项名称 类型(TypeScript 类型) 描述
输出部分
twentyFourHours boolean 设置为true时将会按24小时制显示时间,否则将按 Moment.js 在当前语言下的默认设置显示。
formats object 处理输出格式的部分,包含下列三个参数以在三种情况下输出不同的格式。
day string | function 当目标日期与当前日期间隔不足一周时使用的格式。可以使用字符串直接指定格式也可以使用函数,详见#输出格式
week string | function 当目标日期与当前日期间隔不足一月时使用的格式。可以使用字符串直接指定格式也可以使用函数,详见#输出格式
other string | function 除了上述两种情况外所使用的格式。可以使用字符串直接指定格式也可以使用函数,详见#输出格式
tooltipFormats Array<string, function> 鼠标悬浮在时间戳上时所显示的文本内容,将会按行输出数组中每个元素对应的格式。可以使用字符串直接指定格式也可以使用函数,详见#输出格式
dynamic boolean 当被设置为 false 时本工具将不再随时间推移自动更新文本。
解析部分(一般来说不需要修改)
excludeNamespaces number[] 当页面的名字空间编号在该数组内时本工具会被禁用。
proseTags string[] 通常直接包含时间戳的 HTML 标签名称。这仅仅是性能优化,在此处添加标签可确保以最有效不使用 jQuery的方式对其进行处理,并且不会受到codeTags的影响导致不被解析。
codeTags number[] 使用该数组内的标签的元素包括其子元素在内绝对不被解析。
parseRegExp RegExp 用来匹配时间戳的正则表达式。此正则表达式应或多或少与 parseFormat 选项一致,因此它不必非常严格。它可以包含一个捕获组以表明时区

例如默认的/[1-9]\d{3}年(?:0?[1-9]|1[012])月(?:0?[1-9]|[12]\d|3[01])日 *(?:[((](?:[金木水火土日月]|(?:星期)?[一二三四五六日])[))])? *(?:[01]\d|2[0-3]):(?:[0-5]\d)(?::[0-5]\d)? *[((]([CJ]ST|UTC(?:[+-](?:[1-9]|1[012]))?)[))]/

parseFormat string[] 用来解析被parseRegExp匹配的时间戳,需要符合Moment.js 的语法格式。本工具不会使用严格模式来匹配,所以可以相对宽松

例如对2018年1月29日 (三) 23:52 (CST)使用"YYYY-MM-DD HH:mm"即可正确匹配(注意我们无视了原时间戳的星期数部分)。

杂项
enabled boolean 当被设置为 false 时本工具被禁用。

输出格式

输出格式可以为字符串也可以为函数:

  • 当为字符串时该字符串将直接提交给 Moment.js 并需要按照 Moment.js 的语法格式填写。
  • 当为函数时该函数将会收到两个参数,并需要返回一个字符串,该字符串将会作为结果直接输出:
    1. 第 1 个参数为 Moment.js 对象参数;
    2. 第 2 个参数为字符串,内容为原始时间戳文本。

一些常见的格式如下:

function (_, originalText) { return "原始时间戳:" + originalText; } // 原始时间戳:2020年1月1日 (三) 10:14 (CST)
function (then, _) { return then.fromNow(); }                        // 16 小时前
function (then, _) { return then.calendar(); }                       // 上星期二10:14
"lll"                                                                // 2020年1月1日 10:14
"LLLL"                                                               // 2020年1月1日星期三上午10点14分
"LL[那一天的]LT"                                                     // 2020年1月1日那一天的10:14

注释