Sli*_*liq 7 php date week-number
正如标题所说,PHP的日期("W")函数返回日历周(当天).不幸的是,它在大多数年份的第一天给出了52或53.这是一个简单的思维方式,正确,但非常烦人,因为2012年1月1日不是日历周52,它不是当年的日历周.大多数日历将此定义为上一年的第0周或第52周.
当您按照日历周对每年的每一天进行分组时,这非常棘手:2012年1月1日和2012年12月31日都被放入同一个日历周组.
所以我的问题是:是否存在对PHP日期("W")的(本机)年度敏感的替代方案?
编辑:我想我以非常不明确的方式编写了这个问题的第一个版本,所以这是我的编辑:我正在寻找一个函数,它给出了一年中第一天的正确日历周.PHP的日期("W")给出了2012年1月1日的52,这是"错误的".它应该是0或null.据官方消息称,一年中的第一个日历周从一年的第一个星期一开始.所以,如果一年的第一天不是星期一,那就不是第1周!这是第0周.维基百科文章说
如果1月1日是星期一,星期二,星期三或星期四,则是01周.如果1月1日是星期五,星期六或星期日,则是上一年的第52周或第53周.
这变得棘手,因为今年的最后几天也是在第52/53周.日期("W")不分为当年和上一年.
该解决方案将12月的过量转换为第53周以及1周至第0周之前的所有内容.
$w=(int)date('W');
$m=(int)date('n');
$w=$w==1?($m==12?53:1):($w>=51?($m==1?0:$w):$w);
echo "week $w in ".date('Y');
Run Code Online (Sandbox Code Playgroud)
2013-12-31 ==> 2013年第53周
2014-01-01 ==> 2014年第1周
2015-12-31 ==> 2015年第52周
2016-01-01 ==> 2016年第0周
还有一个小试运行,所以你可以自己看看;-)
$id=array(25,26,27,28,29,30,31,1,2,3,4,5,6,7,8);
for($iy=2013;$iy<2067;++$iy){foreach($id as $k=>$v){if($k<7){$im=12;}else{$im=1;}
if($k==7){++$iy;echo '====<br>';}$tme=strtotime("$im/$v/$iy");
echo date('d-m-Y',$tme),' * * ';
//THE ACTUAL CODE =================
$w=(int)date('W',$tme);
$m=(int)date('n',$tme);
$w=$w==1?($m==12?53:1):($w>=51?($m==1?0:$w):$w);
//THE ACTUAL CODE =================
echo '<b>WEEK: ',$w,' --- ','YEAR: ',date('Y',$tme),'</b><br>';}--$iy;
echo '----------------------------------<br>';}
Run Code Online (Sandbox Code Playgroud)