“以本地时区显示签名时间”小工具是用来对讨论页的时间戳进行重新格式化以便在适当的时候使用相对日期和时间格式的组合。
该工具引自enwp:User:Mxn/CommentsInLocalTime,其作者对原来的enwp:Wikipedia:Comments in Local Time进行了重构,在保持功能一致的情况下提供更大的自由度和更简易的本地化方式。
萌百对该版本进行了修改,以适应萌百环境。
该工具会对所有的合适的页面上的时间戳进行替换,默认对所有讨论页类页面启用。
替换后的文本会随时间推移自动更新。显示的语言格式中由代码指定的部分会 暂时 仅提供简体中文,由 Moment.js 提供的部分会根据你的界面语言变化。
萌百版本更改了默认解析的名字空间,以仅在讨论名字空间启用。
萌百版本改写了默认的解析正则表达式以支持解析中文和日语的时间戳格式,并据此修正了解析函数以支持CST、JST和UTC格式时区。该修正摒弃了需要用户手动在设置中指定utcOffset
来按照用户所在时区显示时间的不便之处[1]。
tooltipFormats
萌百版本给tooltipFormats
所使用的函数追加了第二个参数,该参数的值为被解析的时间戳原本的文字内容,方便对照,详见#输出格式。
萌百版本追加了一项配置twentyFourHours
以兼容原有的版本的此项配置,该项配置可以从mw.config.get("LocalComments", {})
读取。
萌百版本改写了默认的输出方式以贴近原有的版本的表现样式:
原始时间戳 | 替换后的时间戳 |
---|---|
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 标签名称。这仅仅是性能优化,在此处添加标签可确保以codeTags 的影响导致不被解析。
| |
codeTags
|
number[] | 使用该数组内的标签的元素包括其子元素在内绝对不被解析。 | |
parseRegExp
|
RegExp | 用来匹配时间戳的正则表达式。此正则表达式应或多或少与 parseFormat 选项一致,因此它不必非常严格。它可以包含一个捕获组以表明时区
例如默认的 | |
parseFormat
|
string[] | 用来解析被parseRegExp 匹配的时间戳,需要符合Moment.js 的语法格式。本工具不会使用严格模式来匹配,所以可以相对宽松
例如对 | |
杂项 | |||
enabled
|
boolean | 当被设置为 false 时本工具被禁用。
|
输出格式可以为字符串也可以为函数:
一些常见的格式如下:
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