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

DOCS

DEMO

这是一个 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().