PHP:strftime() 与一年中的最后一天
PHP: strftime() vs. last day of year
strftime() 将年份格式设置为当前年份的最后一天不正确。
以下returns“2019 年 12 月 31 日”:
strftime('%d. %B %G',strtotime('31 December 2018'))
该行为可在多台服务器上重现。
date() 解析正确但由于 setlocale()
而不是选项
有什么想法吗?
如果您不想处理 ISO-8601:1988
,请使用 %Y
而不是 %G
根据此规范,第 1 周是第一周(从星期一开始),包括 1 月的星期四,因此 2018-12-31 是本周的一部分(2019-01-03 是星期四)。
因此 %G
返回 2019
。
%G
The full four-digit version of [the year going by ISO-8601:1988 standards]
%G
将代表 %g
的 4 位版本(按照 ISO-8601:1988 标准(见 %V)的两位数表示年份).
%V
- ISO-8601:1988 给定年份的周数,从一年的第一周开始,至少有 4 个工作日,星期一是一周的开始
试试 %Y
。
这是一个 setlocale
问题。 Dezember 在德国是正确的,所以我猜你的服务器在 Europe/Berlin。尝试像这样重写它:
setlocale(LC_ALL, 'nl_NL'); //for Netherlands just an example
根据 strftime
文档:
Format the time and/or date according to locale settings. Month and
weekday names and other language-dependent strings respect the current
locale set with setlocale().
strftime() 将年份格式设置为当前年份的最后一天不正确。 以下returns“2019 年 12 月 31 日”:
strftime('%d. %B %G',strtotime('31 December 2018'))
该行为可在多台服务器上重现。 date() 解析正确但由于 setlocale()
而不是选项有什么想法吗?
如果您不想处理 ISO-8601:1988
,请使用%Y
而不是 %G
根据此规范,第 1 周是第一周(从星期一开始),包括 1 月的星期四,因此 2018-12-31 是本周的一部分(2019-01-03 是星期四)。
因此 %G
返回 2019
。
%G
The full four-digit version of [the year going by ISO-8601:1988 standards]
%G
将代表 %g
的 4 位版本(按照 ISO-8601:1988 标准(见 %V)的两位数表示年份).
%V
- ISO-8601:1988 给定年份的周数,从一年的第一周开始,至少有 4 个工作日,星期一是一周的开始
试试 %Y
。
这是一个 setlocale
问题。 Dezember 在德国是正确的,所以我猜你的服务器在 Europe/Berlin。尝试像这样重写它:
setlocale(LC_ALL, 'nl_NL'); //for Netherlands just an example
根据 strftime
文档:
Format the time and/or date according to locale settings. Month and weekday names and other language-dependent strings respect the current locale set with setlocale().