2016-01-26 7 views
0

У меня есть следующий код, который получает все 52 за последние недели до текущей недели. Я хочу изменить его, чтобы он включал только текущий год. Поэтому он должен показывать только первые 4 недели января.Получите все недели до текущей недели/года

public static function weeks() 
{ 
    $nextWeek = strtotime('+1 week'); 

    for($i=0;$i<52;$i++) 
    { 
     $date = date('Y-m-d', strtotime('-'.$i.' week')); 
     $nbDay = date('N', strtotime($date)); 
     $monday = new \DateTime($date); 
     $sunday = new \DateTime($date); 
     $monday->modify('-'.($nbDay-1).' days'); 
     $sunday->modify('+'.(7-$nbDay).' days'); 

     if($nextWeek > strtotime($sunday->format('Y-m-d'))) { 
      $weeks[$monday->format('W')] = $monday->format('j M Y') . ' - ' . $sunday->format('j M Y'); 
     } 
    } 

    return $weeks; 
} 

Как я могу изменить код?

+0

Вместо того, чтобы рассчитывать, вы должны начать с 1-го числа этого года и подсчитать. – jeroen

ответ

2

Вы можете использовать date() с W за неделю года как верхнюю границу для цикла?

public static function weeks() 
{ 
    $nextWeek = strtotime('+1 week'); 
    /* change the upper bound of the loop using `date('W')` */ 
    for($i=0; $i < date('W'); $i++) 
    { 
     $date = date('Y-m-d', strtotime('-'.$i.' week')); 
     $nbDay = date('N', strtotime($date)); 

     $monday = new \DateTime($date); 
     $sunday = new \DateTime($date); 

     $monday->modify('-'.($nbDay-1).' days'); 
     $sunday->modify('+'.(7-$nbDay).' days'); 

     if($nextWeek > strtotime($sunday->format('Y-m-d'))) { 
      $weeks[$monday->format('W')] = $monday->format('j M Y') . ' - ' . $sunday->format('j M Y'); 
     } 
    } 

    return $weeks; 
} 
Смежные вопросы