2016-11-14 78 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; 
}