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

时间:2015-01-07 00:42:30

标签: php strtotime week-number

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

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

1 个答案:

答案 0 :(得分:2)

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

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

  • 这是第一周,1月份的成员占多数(4个或更多)。
  • 第一天是最接近1月1日的星期一。
  • 它有1月4日。因此,最早可能的日期是12月29日至1月4日,即1月4日至10日。
  • 如果星期六,星期日和1月1日不是工作日,它有一年的第一个工作日。

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

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