【问题标题】:php get correct date by week one of the year using strtotimephp使用strtotime在一年中的第一周获取正确的日期
【发布时间】:2015-01-07 00:42:29
【问题描述】:

我使用此代码获取一年中第一周的第一个日期:

echo date('Y-m-d',strtotime('2018W01'));   #JAN 1 is Monday, returned 01/01
echo date('Y-m-d',strtotime('2013W01'));   #JAN 1 is Tuesday, returned 12/31
echo date('Y-m-d',strtotime('2014W01'));   #JAN 1 is Wednesday, returned 12/30
echo date('Y-m-d',strtotime('2015W01'));   #JAN 1 is Thursday, returned 12/29
echo date('Y-m-d',strtotime('2016W01'));   #JAN 1 is Friday, returned 01/04!? (shouldn't it be 12/28)
echo date('Y-m-d',strtotime('2022W01'));   #JAN 1 is Saturday, returned 01/03!? (shouldn't it be 12/27)
echo date('Y-m-d',strtotime('2017W01'));   #JAN 1 is Sunday, returned 01/02!? (shouldn't it be 12/26)

由于大于 5.2.7 的 PHP 向我显示星期一是一周的第一天,那么我希望 2017 年,一周的第一天应该是 12/26。 PHP是否有一个星期数配置可以正确显示一年中的第一天,一周中的第一天,每年? TIA

【问题讨论】:

    标签: php strtotime week-number


    【解决方案1】:
    echo date('Y-m-d',strtotime('2016W01'));
    #JAN 1 is Friday, returned 01/04!? (shouldn't it be 12/28)
    

    不,不应该是 12/28,因为一年的第一周有这个规则:

    • 这是第一周,大部分(4 天或更多)天在 1 月。
    • 第一天是最接近 1 月 1 日的星期一。
    • 其中有 4 月 4 日。因此,最早可能的日期是 12 月 29 日至 1 月 4 日,最晚是 1 月 4 日至 10 日。
    • 如果星期六、星期日和 1 月 1 日不是工作日,则其中包含一年的第一个工作日。

    如果 1 月 1 日在星期一、星期二、星期三或星期四,则在第 1 周。如果 1 月 1 日在星期五,则在上一年的第 53 周;如果在星期六,它是第 52 周的一部分(如果上一年是闰年,则为第 53 周);如果在星期日,则为上一年第 52 周的一部分。

    其他例子也是正确的。阅读更多here

    【讨论】:

    • 这就是我所害怕的... 无论如何配置 PHP 不使用 ISO 或公历周数系统?这样strtotime 会输出 12/28、12/27 和 12/26?或者唯一的方法是解决并确定 JAN 1 年是否在周五到周日登陆,如果是这样,周数减 1?一周不必从星期一开始,我只需要 php 系统地给出一周 # 没有要求有 4 天被视为一周 #1 的特殊规则。我希望仅 1 天就足以被视为第 1 周。谢谢你的回答,TIA
    • @xam:我不知道您为什么需要自己制定有关周编号的逻辑?当您使用格式 YEAR-W0x 时,您使用的是 ISO 标准。如果您需要某种自定义逻辑,则需要自己制作,它们不是本机功能;但我宁愿使用 ISO 标准,也不愿做一些自定义逻辑……
    • 改变标准不是我的本意。我永远不会猜到该标准需要 4 天才能被认为是第 1 周。可能这就是 ISO 标准……还有其他 PHP 可以使用的标准吗?我天真地认为一年中的第一周只需要一年中的第一天。如果我可以通过更改格式来使用其他标准,我想试一试。谢谢你和 TIA。
    • @xam:ISO8601 只是说,第一周或最后一周属于拥有大部分天数的年份(这对我来说很有意义)。因此,如果 12 月有 4 天以上,则周属于 X 年;如果 4+ 天在 1 月,则属于 X+1 年。没有任何我应该知道的标准使第 1 周只有那些在一月份有所有日子的周......但是现在,您知道这个 ISO 是如何工作的,为什么不使用它呢?
    • 我已经解决并修复了一些由这个概念引起的错误,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多