PHP:strftime()与一年中的最后一天

时间:2018-11-26 11:40:35

标签: php strftime

strftime()格式化当年最后一天的年份不正确。 以下返回“ 31. Dezember 2019”:

strftime('%d. %B %G',strtotime('31 December 2018'))

该行为可在多台服务器上重现。 date()解析正确,但由于setlocale()而无法选择

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

如果您不想使用ISO-8601:1988,请使用%Y代替%G

根据此规范,第1周是第一周(从星期一开始),包括一月的星期四,因此2018-12-31是本周的一部分(2019-01-03是星期四)。

正因为如此,%G返回了2019

  

%G

     

[按照ISO-8601:1988标准的年度]的完整四位数版本

答案 1 :(得分:1)

%G将代表%g的4位数字版本(按照ISO-8601:1988标准(请参见%V)表示年份的两位数字)。

%V- ISO-8601:1988给定年份的星期数,从每年的第一周开始,至少要有4个工作日,而星期一是一周的开始

改为尝试%Y

DOCS

DEMO

答案 2 :(得分:0)

这是一个setlocale问题。 Dezember在德国是正确的,所以我想您的服务器在欧洲/柏林。尝试像这样重写它:

setlocale(LC_ALL, 'nl_NL'); //for Netherlands just an example

根据strftime文档:

  

根据语言环境设置格式化时间和/或日期。月份和   工作日名称和其他与语言相关的字符串会尊重当前   使用setlocale()设置语言环境。