【问题标题】:PHP: strftime() vs. last day of yearPHP:strftime() 与一年中的最后一天
【发布时间】:2018-11-26 11:40:35
【问题描述】:

strftime() 对当年最后一天的年份格式不正确。 以下返回“2019 年 12 月 31 日”:

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

该行为可在多个服务器上重现。 date() 解析正确,但由于 setlocale() 而不是选项

有什么想法吗?

【问题讨论】:

标签: php strftime


【解决方案1】:

如果您不想处理 ISO-8601:1988,请使用 %Y 而不是 %G

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

因此%G 正在返回2019

%G

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

【讨论】:

    【解决方案2】:

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

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

    改用%Y

    DOCS

    DEMO

    【讨论】:

      【解决方案3】:

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

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

      根据strftime 文档:

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

      【讨论】:

        猜你喜欢
        • 2020-04-03
        • 2017-08-19
        • 1970-01-01
        • 2022-07-22
        • 2015-07-09
        • 1970-01-01
        • 2020-07-11
        • 1970-01-01
        • 2013-09-04
        相关资源
        最近更新 更多