How to get year-sensitive calendar week ? date(“W”) gives back 52 for 1st of January

后端 未结 3 773
感情败类
感情败类 2020-12-09 13:11

As the headline says, PHP\'s date(\"W\") function gives back the calendar week (for the current day). Unfortunatly it gives back 52 or 53 for the first day(s) of most years.

3条回答
  •  轮回少年
    2020-12-09 13:50

    This solution converts the excess of december to week 53 and everything in january prior to week 1 to week 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');
    

    2013-12-31 ==> week 53 in 2013

    2014-01-01 ==> week 1 in 2014

    2015-12-31 ==> week 52 in 2015

    2016-01-01 ==> week 0 in 2016

    And a small test run, so you can see for yourself ;-)

    $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 '====
    ';}$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 'WEEK: ',$w,' --- ','YEAR: ',date('Y',$tme),'
    ';}--$iy; echo '----------------------------------
    ';}

提交回复
热议问题