置顶公告:【置顶】关于临时开启评论区所有功能的公告(2022.10.22) | 【置顶】关于本站Widget恢复使用的公告
  • 你好~!欢迎来到萌娘百科镜像站!如需查看或编辑,请联系本站管理员注册账号。
  • 本镜像站和其他萌娘百科的镜像站无关,请注意分别。

幫助:以本地時區顯示簽名時間

萌娘百科,萬物皆可萌的百科全書!轉載請標註來源頁面的網頁連結,並聲明引自萌娘百科。內容不可商用。
跳至導覽 跳至搜尋
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

註釋