phpは指定された日付の1週間の開始日と終了日を取得し、1週間をサポートするのは何週間からですか.


仕事の都合上、木曜日から1週間の開始終了日を取得する必要がありますが、phpは今週の開始日と終了日を取得する方法を提供していないので、後で使いやすい方法を書きました.
計算方法:
<?php
/** *                  * @param DateTime $date    * @param Int $start           1-6   ~  ,0   ,  0 * @retrun Array */
function getWeekRange($date, $start=0){

    //        
    $dt = new DateTime($date);
    $timestamp = $dt->format('U');

    //        
    $day = (new DateTime('@'.$timestamp))->format('w');

    //       
    if($day>=$start){
        $startdate_timestamp = mktime(0,0,0,date('m',$timestamp),date('d',$timestamp)-($day-$start),date('Y',$timestamp));
    }elseif($day<$start){
        $startdate_timestamp = mktime(0,0,0,date('m',$timestamp),date('d',$timestamp)-7+$start-$day,date('Y',$timestamp));
    }

    //     =    +6
    $enddate_timestamp = mktime(0,0,0,date('m',$startdate_timestamp),date('d',$startdate_timestamp)+6,date('Y',$startdate_timestamp));

    $startdate = (new DateTime('@'.$startdate_timestamp))->format('Y-m-d');
    $enddate = (new DateTime('@'.$enddate_timestamp))->format('Y-m-d');

    return array($startdate, $enddate);
}
?>

例:テストは、計算開始日の週の開始日と終了日をそれぞれ月曜日から日曜日に設定します.
<?php
$date = '2016-04-27';
for($start=0; $start<=6; $start++){
    list($startdate, $enddate) = getWeekRange($date, $start);
    echo 'date:'.$date.' week start:'.$start.' range:'.$startdate.', '.$enddate.'<br>';
}
?>

出力:
date:2016-04-27 week start:0 range:2016-04-24, 2016-04-30
date:2016-04-27 week start:1 range:2016-04-25, 2016-05-01
date:2016-04-27 week start:2 range:2016-04-26, 2016-05-02
date:2016-04-27 week start:3 range:2016-04-27, 2016-05-03
date:2016-04-27 week start:4 range:2016-04-21, 2016-04-27
date:2016-04-27 week start:5 range:2016-04-22, 2016-04-28
date:2016-04-27 week start:6 range:2016-04-23, 2016-04-29