Tools 是非官方社区Wiki。社区文档正在编写中,欢迎参与。 Wiki编辑答疑群:717421103
版本250722.2
全站通知:

帮助:解析函数/formatdate

来自WIKI实验室WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

formatdate是一个解析函数。帮助:解析函数页列出了所有解析函数的说明。

formatdate

日期格式用户化。MediaWiki原生支持。

将ISO 8601日期转换为 月日年 等格式,如10月 1, 2025。由于支持的格式均不符合中文表述习惯,因此对中文wiki几乎无用。


语法

{{#formatdate: YYYY-MM-DD | 格式 }}
  • 日期:必须为YYYY-MM-DD格式(ISO 8601),1月写为01,公元221年写为0221,公元前551写为-0551
  • 格式(可选):指定输出格式,支持ISO 8601、dmy、mdy和ymd,默认为用户偏好设置。(dmy,指day month year)


  • 输出是HTML,如:<span class="mw-formatted-date" title="1949-10-01">10月 01, 1949</span>

如果输入日期格式无效或格式化失败,将原样返回输入日期。

用户可以在特殊:参数设置中指定日期格式(默认,或ISO 8601格式)。

示例

  • ISO 8601标准格式 {{#formatdate:2025-10-01|ISO 8601}}<span class="mw-formatted-date" title="2025-10-01">2025-10-01</span>2025-10-01
  • 支持
    • 年/月/日格式 {{#formatdate:2025-10-01|ymd}}<span class="mw-formatted-date" title="2025-10-01">2025 10月 1</span>2025 10月 1
    • 月/日/年格式 {{#formatdate:2025-08-01|mdy}}<span class="mw-formatted-date" title="2025-08-01">8月 1, 2025</span>8月 1, 2025
    • 日/月/年格式 {{#formatdate:2025-06-01|dmy}}<span class="mw-formatted-date" title="2025-06-01">1 6月 2025</span>1 6月 2025
  • 错误输入示例:
    • 输入格式错误时,不会执行格式化,日期将按原样返回。
    • 缺少前导零 {{#formatdate:2025-1-1|ISO 8601}}2025-1-1
    • 错误格式 {{#formatdate:25/12/2025|ISO 8601}}25/12/2025
  • 特殊场景示例:
    • 无效日期 {{#formatdate:2025-02-32|ISO 8601}}<span class="mw-formatted-date" title="2025-02-32">2025-02-32</span>
    • 无效日期 {{#formatdate:2025-02-32|ymd}}<span class="mw-formatted-date" title="2025-02-32">2025 2月 32</span>
    • 仅提供月和日 {{#dateformat:25 decEmber|mdy}} → 25 decEmber (官方文档描述:如果仅给出月份和日期,则只有 mdy 和 dmy 有效,但实际上似乎不是这样)
    • 仅提供月和日 {{#dateformat:10-01|mdy}} → 10-01
    • 负年份处理 {{#formatdate:-0551-09-28|ISO 8601}}-0551-09-28(不支持BC/BCE表示法,需要用负数表示公元前)

底层代码

来自MediaWiki及其扩展的源代码,运行在服务端。此处仅供快速查阅,便于更充分的挖掘其“特性”。

public static function formatDate( $parser, $date, $defaultPref = null ) {
    $lang = $parser->getFunctionLang();
    $df = MediaWikiServices::getInstance()->getDateFormatterFactory()->get( $lang );

    $date = trim( $date );

    $pref = $parser->getOptions()->getDateFormat();

    if ( $pref == 'default' && $defaultPref ) {
        $pref = $defaultPref;
    }

    $date = $df->reformat( $pref, $date, [ 'match-whole' ] );
    return $date;
}
代码逻辑:
  • 获取当前wiki的语言设置
  • 根据语言获取对应的日期格式化器
  • 如果用户日期格式设置为'default'且提供了默认格式参数,则使用默认格式
  • 尝试将输入日期重新格式化为指定格式
  • 如果格式化失败,返回原始输入

实际用例

一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时仅供批判性参考