You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MediaWiki中按用户本地时间显示历史事件时间戳?

需求与解决方案:MediaWiki适配用户时区的历史时间展示

核心需求

  • 文章中历史事件时间线的固定时间点(支持带时区的时间戳/日期)需自动适配用户时区展示
  • 时区优先级:浏览器时区 > 用户「外观」设置的时区 > 维基默认时区
  • 理想支持Visual Editor便捷插入,可选添加时区切换下拉框

已尝试无效方案

  • Dynamic dates/日期格式与链接:MediaWiki 1.21已移除,不符合需求
  • 魔术词(Magic words):仅显示UTC当前时间,无法处理历史时间点
  • ParserFunctions的#time函数:始终显示UTC时间,非欧美用户体验差
  • ParserFunctions的#timel函数:仅支持全局单一时区,无法适配不同用户,且仅支持源码编辑器
  • StringFunctions扩展:ParserFunctions旧版本,已过时
  • Semantic MediaWiki:Date类型不考虑用户时区设置
  • 维基百科/火狐维基的日期格式模板:未找到有效方案

可行解决方案

现有扩展方案

  1. Extension:TimezoneConverter

    • 支持插入带时区标记的时间,自动根据用户时区(浏览器/用户设置)转换显示
    • 提供可视化编辑器插件,可在Visual Editor中快速插入时间标记
    • 部分版本支持时区切换下拉框,用户可手动切换查看不同时区的时间
  2. Extension:DateFormatter

    • 基于用户时区设置渲染日期时间,支持历史时间点的转换
    • 可通过模板或解析函数调用,兼容Visual Editor的模板插入功能

自定义开发插件步骤

若现有扩展不满足需求,可自行开发MediaWiki扩展,步骤如下:

  1. 搭建扩展基础结构

    • 创建扩展目录(如extensions/UserTimezoneDate),包含主文件UserTimezoneDate.php、国际化目录i18n、前端资源目录resources
    • 在主文件中注册扩展,声明钩子、解析函数或可视化编辑器插件
  2. 实现后端逻辑

    • 定义解析函数(如#usertimezone),接收原始时间戳/带时区的日期字符串作为参数
    • 获取时区优先级:优先取浏览器通过JS传递的时区,其次取用户user_properties表中的timezone字段,最后使用全局配置$wgLocaltimezone
    • 利用PHP的DateTime类完成时间转换,支持自定义输出格式
  3. 开发前端交互

    • 编写JS脚本,页面加载时获取浏览器时区,通过全局变量或AJAX传递给后端
    • 实现时区切换下拉框:监听选择事件,触发页面时间元素的重新渲染
    • 开发Visual Editor插件,添加插入时间的按钮,支持用户输入原始时间、选择时区,自动生成解析函数标记
  4. 测试与部署

    • 在LocalSettings.php中启用扩展:wfLoadExtension( 'UserTimezoneDate' );
    • 测试不同时区用户、不同时间格式的转换效果
    • 优化Visual Editor插入流程,确保操作便捷

内容的提问来源于stack exchange,提问作者azoundria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 02:17:38