Php 获取一月周数时的不规则输出

Php 获取一月周数时的不规则输出,php,strtotime,Php,Strtotime,有人能解释为什么会这样吗 <?php echo date("W", strtotime("2015-01-01"))."<br>"; //returns 1 echo date("W", strtotime("2014-01-01"))."<br>"; //returns 1 echo date("W", strtotime("2016-01-01"))."<br>"; //returns 53 ?> 当输出当月的周

有人能解释为什么会这样吗

<?php    
  echo date("W", strtotime("2015-01-01"))."<br>";  //returns 1
  echo date("W", strtotime("2014-01-01"))."<br>";  //returns 1
  echo date("W", strtotime("2016-01-01"))."<br>";  //returns 53
?>


当输出当月的周数时,某些情况下的结果不正确。这里的输出,周数是1,这在前两种情况下是正确的,但在第三种情况下不是正确的。

它在“2016-01-01”中输出53而不是1的原因是它从2016年1月4日(“2016-01-04”)的第一个星期一开始计算一年的第一周

W ISO-8601年的周数,星期一开始的周数(以PHP添加) 4.1.0)示例:42(一年中的第42周)

请参阅php日期函数的完整文档

如前所述,W ISO-8601年的周数是您得到的数字

有关ISO-8601年工作周数的更多信息,请参见下文

ISO周编号年(非正式地称为ISO年)有52或 整整53周。这是364或371天,而不是通常的365或366天 天。额外的一周在这里被称为闰周,尽管ISO 8601不使用此术语。星期从星期一开始。第一周 一年中的第一个星期四是一年中的第一个星期四 (因此,始终包含1月4日)。ISO周年编号 因此,在接近公历的一些日子里,会稍微偏离公历 1月1日

来源:


2016-01-01属于2015年的最后一周,因为该周在该年开始,所以结果是正确的。

2016年的第一周从周一第4天开始。那么我如何才能获得该年的正确周数。这里我想将周数返回为1,因为1月1日是该年的第一周。结果是正确的,因为“W”给出ISO-8601年的周数。请阅读ISO-8601的定义week@tyro2016年1月1日不是2016年的第一周,而是2015年的最后一周。