php 使用 strtotime 按一年中的第一周获取正确的日期

php get correct date by week one of the year using strtotime

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

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)

因为 PHP 大于 5.2.7,告诉我星期一是一周的第一天,那么我希望 2017 年,一周的第一天应该是 12/ 26. PHP 某处是否有周数配置以正确显示每年的第一天、一周、一年? TIA

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 日最近的星期一。
  • 里面有 1 月 4 日。因此,最早的日期是 12 月 29 日至 1 月 4 日,最晚的日期是 1 月 4 日至 10 日。
  • 里面有一年的第一个工作日,如果星期六、星期日和1月1日不是工作日。

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

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