strftime()格式化当年最后一天的年份不正确。 以下返回“ 31. Dezember 2019”:
strftime('%d. %B %G',strtotime('31 December 2018'))
该行为可在多台服务器上重现。 date()解析正确,但由于setlocale()而无法选择
有什么想法吗?
答案 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
。
答案 2 :(得分:0)
这是一个setlocale
问题。 Dezember在德国是正确的,所以我想您的服务器在欧洲/柏林。尝试像这样重写它:
setlocale(LC_ALL, 'nl_NL'); //for Netherlands just an example
根据strftime
文档:
根据语言环境设置格式化时间和/或日期。月份和 工作日名称和其他与语言相关的字符串会尊重当前 使用setlocale()设置语言环境。