我发现 PHP 5.6 中可能存在错误。功能strftime
参数为%G
生成 4 位数年份。然而,喂食时似乎返回了错误的年份1483246800
- 即 2017 年 1 月 1 日。它会返回 2016 年!
示例代码片段:
echo strftime('%G', strtotime('2017-01-01'));
这应该打印“2017”,但我得到“2016”。我正在运行 PHP 5.6。
这种边缘情况也出现在其他年份 - 例如2016-01-03 输出 2015 年而不是 2016 年。
这不是一个错误。
As 有人指出 https://bugs.php.net/bug.php?id=21212回应其他人不久前提交的错误报告:
%G - 与 ISO 周数相对应的 4 位年份(参见 %V)。它与 %Y 具有相同的格式和值,不同之处在于如果 ISO 周数属于上一年或下一年,则使用该年...关于 ISO 周数的提醒。它们从周一开始,周日结束,并且被认为是一年中大部分时间的一部分.
这意味着使用%G
对于接近一年开始/结束的日期可以给你正确的年份,previous年,如您的情况,或next年,(例如,echo strftime('%Y', strtotime('2002-12-30))
gives 2003
).
如果你想获得正确的年份,你应该使用%Y
反而。echo strftime('%Y', strtotime('2017-01-01'));
给出 2017 年。
也值得一看%V的定义 http://php.net/manual/en/function.strftime.php:
ISO-8601:1988 给定年份的周数,从该年的第一周开始,至少有 4 个工作日,星期一为一周的开始。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)