社区文档构建中,欢迎编辑。 社区答疑群(非官方):717421103,点点小课堂(腾讯会议):5696651544

全站通知:

帮助:解析函数/time

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

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

缺少内容。本Wiki由与你一样的用户共同编写,请帮助我们完善内容:开始编辑
  • 参考官方文档和其他文档完善内容
  • 增加实际用例和技巧
  • 说人话
代码 说明 当前输出值
清除此页面缓存以更新结果)
Y 4位数表示的年。 2024
y 2位数表示的年。 24
L 1表示闰年(Leap year),0表示非闰年。 1
o[注 1] ISO-8601 规定的该周所属年份。[注 2] 2024[注 3]
  1. 需要 PHP 5.1.0 或更新版本和 MediaWiki rev:45208
  2. 一般与 Y 相同,除非 ISO 规定的周数(W)属于前一年或者后一年,则使用 ISO 规定的年份。
  3. 如果 注 1 的条件不满足,会显示字母 o
n 月份号,无前导零。 5
m 月份号,有前导零。 05
M 月份名称缩写,使用网站语言。(英文结果为 May 5月
F 月份名称全称,使用网站语言。(英文结果为 May 5月
xg 月份名称全称,使用网站语言的属格(Genitive)形式,注意区分其与主格(Nominative)形式的区别。

这项功能在斯拉夫语族(Slavic languages)中十分重要,如波兰语、俄语、白俄罗斯语、捷克语、斯洛伐克语、斯洛文尼亚语、乌克兰语等。

在中文环境下:
属格为全汉字月份名称;
主格为数字+汉字月份名称。

对于中文:

(主格)
{{#time:Y F d|20 June 2010|zh}}
→ 2010 6月 20

(属格)
{{#time:Y xg d|20 June 2010|zh}}
→ 2010 6月 20

W ISO 8601 规定的周数,有前导零。 21
j 月份内的日期号,无前导零。 21
d 月份内的日期号,有前导零。 21
z 年份内的日期号 (1月1日 = 0)。
注意:要获得 ISO 规定的日期号,需加上1。
141
D 星期的缩写。国际上不通用。
l 星期的全称。国际上不通用。 星期二
N ISO 8601 规定的星期编号(星期一 = 1,星期日 = 7)。 2
w 星期编号(星期日 = 0,星期六 = 6)。 2
a 早上为 am(00:00:00 → 11:59:59);
其他时间为 pm(12:00:00 → 23:59:59)。
pm
A 上方 a 的大写形式。 PM
g 12小时制的时,无前导零。 11
h 12小时制的时,有前导零。 11
G 24小时制的时,无前导零。 23
H 24小时制的时,有前导零。 23
分 和 秒
i 小时后的分钟数,有前导零。 51
s 分钟后的秒钟数,有前导零。 51
U UNIX时间(Unix time)。从格林尼治时间(GMT)1970年1月1日00:00:00开始计的秒钟数。 1716335511
时区(需 MediaWiki 1.22wmf2
e 时区标识符。 UTC
I 当前日期是否使用日光节约时间(夏令时)。 0
O 与格林尼治时间(GMT)的时差。 +0000
P 与格林尼治时间(GMT)的时差,带有冒号分隔。 +00:00
T 时区缩写。 UTC
Z 以秒计的时差。 0
杂项
t 当前月份的天数。 31
c ISO 8601 格式的日期,等价于 Y-m-d"T"H:i:s+00:00 2024-05-21T23:51:51+00:00
r RFC 5322 格式的日期,等价于 D, j M Y H:i:s +0000,其中星期名和月份名国际上不通用。 Tue, 21 May 2024 23:51:51 +0000
非公历日历
伊斯兰历(Islamic calendar),又称 希吉来历(Hijri calendar)
xmj 月份内的日期号。 13
xmF 月份名称全称。 都尔喀尔德月
xmn 月份号。 11
xmY 全长表示的年。 1445
伊朗历(Iranian calendar),又称 贾拉利历(Jalali calendar)
xij 月份内的日期号。 1
xiF 月份名称全称。 Khordad
xin 月份号。 3
xiY 全长表示的年。 1403
xiy 2位数表示的年。 03
希伯来历(Hebrew calendar
xjj 月份内的日期号。 13
xjF 月份名称全称。 以珥月
xjt 当前月份的天数。 29
xjx 属格形式的月份名称。 Iyar
xjn 月份号。 8
xjY 全长表示的年。 5784
泰国历(Thai solar calendar
xkY 泰国历的全长表示的年。
注意:公历1941年前的年份,1月到3月的范围内,计算得到的泰国历年份不正确。(原因
2567
民国纪年(Minguo calender
朝鲜历(North Korean calendar),又称 主体历(Juche calendar)
xoY 全长表示的年。 113
日本年号(Japanese era name, or Japanese nengo)
xtY 全长表示的年(带有年号)。 令和6
转换标志
xn 将下一个数字代码转换为原始 ASCII 格式数字。 在印地语中,{{#time:H, xnH}} 得到的是 ०६, 06
xN xn 功能类似。但它持续起作用到字串末尾,或字串中的下一个 xN 处。
xr 将下一个数字代码转换为罗马数字格式。仅对 10,000 以内的数字有效
(MediaWiki 1.20 之前,仅对 3,000 以内的数字有效)
{{#time:xrY}}
MMXXIV
xh 将下一个数字代码转换为希伯来数字格式。 {{#time:xhY}}
ב'כ"ד

将日期和/或时间(公历)按格式字串规定的格式进行转换。
可自行指定日期/时间对象,默认使用魔术字(Magic word{{CURRENTTIMESTAMP}}的值(该值使用世界协调时间,UTC),也就是页面最近一次渲染为HTML的时间。

出自扩展ParserFunctions

格式
{{#time: 格式字串 }}
{{#time: 格式字串 | 日期/时间对象 }}
{{#time: 格式字串 | 日期/时间对象 | 语言代码 }}
在右边的表格中列出了支持的格式控制代码。'格式字串'中的任何不被识别的字符将原样输出,包括空格(系统不用它们来编译代码)。
还有两种方法可以使'格式字串'内的字符原样输出:
  1. 反斜杠\后加字符,可以原样输出单个字母:
  2. 一对半角双引号" "内的字符被当作文字,会原样输出,不带双引号。
另外,还可以用xx来输出单个字母x
例子
{{#time:\m}}m
{{#time:\xg}}x11x被原样输出,g被当作格式控制代码)
{{#time: Y-m-d }}2024-05-21
{{#time: [[Y]] m d }}2024 05 21
{{#time: [[Y (year)]] }}2024 (24UTCpmTue, 21 May 2024 23:51:51 +0000) (year被当作格式控制代码year
{{#time: [[Y "(year)"]] }}2024 (year)
{{#time: i's" }}51'51"
'日期/时间对象'可以使用任何PHP中strtotime()函数支持的格式。可以使用绝对时间(如20 December 2000)和相对时间(如+20 hours):
{{#time: r|now}}Tue, 21 May 2024 23:51:51 +0000
{{#time: r|+2 hours}}Wed, 22 May 2024 01:51:51 +0000
{{#time: r|now + 2 hours}}Wed, 22 May 2024 01:51:51 +0000
{{#time: r|20 December 2000}}Wed, 20 Dec 2000 00:00:00 +0000
{{#time: r|December 20, 2000}}Wed, 20 Dec 2000 00:00:00 +0000
{{#time: r|2000-12-20}}Wed, 20 Dec 2000 00:00:00 +0000
{{#time: r|2000 December 20}}错误:无效时间。
'语言代码'使用的是ISO 639-3标准,可以显示所选语言的时间格式:
{{#time:d F Y|1988-02-28|nl}}28 februari 1988
{{#time:l|now|uk}}вівторок
{{#time:d xg Y|20 June 2010|pl}}20 czerwca 2010
译者注:以上三例本wiki内不起作用,因为不支持该语言。
如果需要在计算时使用UNIX时间,可以在UNIX时间前加上@
{{#time: U | now }}1716335512
{{#time: r|@1485582296}}Sat, 28 Jan 2017 05:44:56 +0000
注意:可接受的输入时间范围0111年1月1日9999年12月31日。100年到110年的各个格式控制代码的输出不一致:YL按照100-110年来计算;但rDlU是按照2000-2010年来计算的:
{{#time: d F Y | 29 Feb 0100 }}01 3月 0100
上面的结果正确,但是:
{{#time: r | 29 Feb 0100 }}Mon, 01 Mar 0100 00:00:00 +0000
上面的结果错误,因为100年不是闰年,但2000年是闰年,上面的结果是按照2000年计算的。
超过9999年会得到不正确的结果:
{{#time: d F Y | 15 April 10000 }}错误:无效时间。
{{#time: r | 10000-4-15 }}Sat, 15 Apr 2000 10:00:00 +0000
0-99年被当作2000-2069年、1970-1999年来处理,除非使用4位数年格式来表示这些年份:
{{#time: d F Y | 1 Jan 6 }}01 1月 2006
{{#time: d F Y | 1 Jan 06 }}01 1月 2006
{{#time: d F Y | 1 Jan 006 }}01 1月 2006
{{#time: d F Y | 1 Jan 0006 }}01 1月 0006 (使用了4位数年)
星期名称支持100-110年和1753年以后的年份。111-1752年的r中星期输出为Unknownl的输出为<>,且这几年的r输出值不能当作有效的输入值。
译者注:
测试了一些111-1752之间的年份,已经可以正常显示星期,且正确:
{{#time: r | 1 Jan 1600 }}Sat, 01 Jan 1600 00:00:00 +0000 (应为星期六)
{{#time: r | 23 Dec 802 }}Mon, 23 Dec 0802 00:00:00 +0000 (应为星期一)
使用日期转换进行验证。
可以指定完整的绝对日期,或者是一部分,此函数会将缺少的部分用当前日期的值填补:
{{#time: Y | January 1 }}2024
注意:填补功能在不同情况下填补不同的内容:
{{#time: Y m d H:i:s | June }}2024 06 21 00:00:00 (使用了一天的开始时刻,填补了当前月份内的日期号、年份)
{{#time: Y m d H:i:s | 2003 }}2003 05 21 00:00:00 (使用了一天的开始时刻,填补了当前年份内的日期号)
在MediaWiki r86805之后,4位数字一概会被认为是年份,而非小时与分钟:
{{#time: Y m d H:i:s | 1959 }}1959 05 21 00:00:00
6位数字会被认为是小时、分钟和秒钟,如果得到的时间不正确,则会报错(一概不会当作年份和月份):
{{#time: Y m d H:i:s | 195909 }}2024 05 21 19:59:09 (被当作时分秒而不是年月)
{{#time: Y m d H:i:s | 196009 }}错误:无效时间。 (即使19:60:09不是正确的时间,196009也不会被当作年月)
函数定量计算天数来得到日期:
{{#time: Y F d | January 0 2008 }}2007 12月 31
{{#time: F d | January 32 }}错误:无效时间。 (一个月超过31天的话,会报错)
{{#time: F d | February 29 2008 }}2月 29
{{#time: F d | February 29 2007 }}3月 01
{{#time:Y F|now -1 months}}2024 4月
#time中'格式字串'的总长度限制为6000字符
关于时区
解析函数#time中有一个bug(更确切的说是PHP日期时间的bug),不允许传入非整数的相对时差。这个问题在整点时区不会出现,如东部夏令时间(EDT):
{{#time:g:i A | -4 hours }}7:51 PM
但是,委内瑞拉(委内瑞拉标准时间,VET)与世界协调时间(UTC)的时差是-4.5小时,如果直接输入则不会得到正确的结果,如下:
{{#time:g:i A | -4.5 hours }}8:51 AM
可以将时差转换为分钟或者秒钟来解决这个问题:
{{#time:g:i A | -270 minutes }}7:21 PM
{{#time:g:i A | -16200 seconds }}7:21 PM
(上述方法由此函数开发者 Tim Starling 提供)