2016-11-14 106 views
1

內的開始日期和星期的結束日期一年比一年和週數時,我有一個計劃,讓一個星期的開始日期和結束日期。以下是代碼。獲取月份開始和月末

function getStartAndEndDate($week, $year) { 
    $dto = new DateTime(); 
    $dto->setISODate($year, $week,0); 
    $ret['week_start'] = $dto->format('Y-m-d'); 
    $dto->modify('+6 days'); 
    $ret['week_end'] = $dto->format('Y-m-d'); 
    return $ret; 
} 

$week_array = getStartAndEndDate(5,2017); 
print_r($week_array); 

這將輸出結果作爲

Array ([week_start] => 2017-01-29 [week_end] => 2017-02-04) 

但我需要一週兩個部分。例如,結果應如下

Array ([week_start] => 2017-01-29 [week_end] => 2017-01-31) 
Array ([week_start] => 2017-02-01 [week_end] => 2017-02-04) 

這意味着我需要不同月份的單獨值。任何幫助將不勝感激。

+0

如何在'2天內'週末結束' –

+0

實際上這一週還沒有結束。如果日期在不同的月份,我需要的是將同一周分成兩份。 – Thejas

回答

3

您按月比較兩個日期和使用't'格式後拿到這個月的最後一天。請按照description of date() function瞭解更多有關所有可用格式和下面的示例。

除非您確實需要可變版本,否則最好使用DateTimeImmutable而不是DateTime

function getStartAndEndDate($week, $year) 
{ 
    $dto = (new DateTimeImmutable())->setISODate($year, $week, 0); 
    $weekStart = $dto; 
    $weekEnd = $dto->modify('+6 days'); 

    $ret = []; 
    if ($weekStart->format('m') === $weekEnd->format('m')) { 
     $ret[] = [ 
      'week_start' => $weekStart, 
      'week_end' => $weekEnd, 
     ]; 
    } else { 
     $ret[] = [ 
      'week_start' => $weekStart->format('Y-m-d'), 
      // 't' = the last day of the month. 
      'week_end' => $weekStart->format('Y-m-t'), 
     ]; 

     $ret[] = [ 
      // The first day of the month. 
      'week_start' => $weekEnd->format('Y-m-01'), 
      'week_end' => $weekEnd->format('Y-m-d'), 
     ]; 
    } 

    return $ret; 
}