MediaWiki模板技术问询:如何获取带前导零月份数字并处理加减?
解决带前导零月份运算后丢失格式的思路
这个坑我之前做博客归档链接的时候踩过!核心问题在于:带前导零的字符串一旦参与数字运算,会被自动转换为纯数字类型,前导零自然就丢了。所以得把「数值运算」和「格式补零」拆成两步处理,下面给你几个具体的解决方向:
1. 先运算数值,再补前导零
不要直接对MONTHNUMBER返回的带前导零字符串做±1操作,而是先把它转成整数完成运算,再把结果格式化为两位带前导零的字符串。
比如用模板语言的通用逻辑(不管你用的是Liquid、Twig还是其他模板引擎,思路都一致):
- 第一步:把
MONTHNUMBER的输出转成整数:{{ MONTHNUMBER | int }} - 第二步:做增减运算:
{{ (MONTHNUMBER | int) + 1 }} - 第三步:把运算后的数字格式化为两位带前导零的字符串,比如用格式化函数:
{{ "%02d" | format( (MONTHNUMBER | int) + 1 ) }}
这样最终得到的就是带前导零的月份数字,直接拼入链接2018/{{ 格式化后的月份 }}就可以了。
2. 封装一个通用的月份调整模板
如果需要频繁做这种月份增减操作,最好封装一个可复用的模板片段(比如叫ADJUST_MONTH),把运算和格式化逻辑都包进去,避免重复代码。
举个伪代码示例(以类似Twig的语法为例):
{% macro adjust_month(original_month, delta) %} {# 先把原始月份转成整数 #} {% set raw_month = original_month | int %} {# 完成增减运算,同时处理边界(比如1月减1要到12月,12月加1要到1月) #} {% set new_month = raw_month + delta %} {% if new_month < 1 %} {% set new_month = new_month + 12 %} {% elif new_month > 12 %} {% set new_month = new_month - 12 %} {% endif %} {# 格式化为带前导零的两位数字 #} {{ "%02d" | format(new_month) }} {% endmacro %}
之后调用的时候就很简单了,比如要生成当前月份+1的链接:2018/{{ adjust_month(MONTHNUMBER, 1) }}
要生成随机非当前月份(比如减2):2018/{{ adjust_month(MONTHNUMBER, -2) }}
3. 别忘了处理跨年度的情况
如果你的链接需要包含年份(比如从2018/01减1应该指向2017/12),那还要在月份调整的同时同步调整年份。可以在上面的模板里再加个年份参数,一起处理边界:
- 当月份从1月减1时,年份减1,月份设为12
- 当月份从12月加1时,年份加1,月份设为01
这样生成的链接才不会出错。
内容的提问来源于stack exchange,提问作者SuperCiocia
相关产品推荐
相关产品推荐

