2014-02-03 5 views
0

Я хочу использовать YEARWEEK для агрегирования данных еженедельно, и я хочу, чтобы воскресенье как первый день недели. В SQL-запросе я использую режим 6 для агрегирования данных, но не имею эквивалента в течение года в PHP. PHP, похоже, не имеет возможности изменить начальный день недели.MySQL WEEK() 6 PHP-эквивалент

ответ

0

мое решение до сих пор

public static function getYearWeek(DateTime $dateTime) 
    { 
     $minDaysInWeek = 4; 
     $numDaysInWeek = 7; 
     $firstDayOfYear = clone $dateTime; 
     $lastDayOfYear = clone $dateTime; 
     $yearStartingDay = $firstDayOfYear->modify('first day of January this year')->format('N'); 
     $numberOfDaysInYear = $lastDayOfYear->modify('last day of December this year')->format('z') + 1; 
     $ordinalDate = $dateTime->format('z') + 1; 
     $weekOffset = $yearStartingDay < $minDaysInWeek ? 1 : 0; 

     $weekNum = ceil(($ordinalDate + $yearStartingDay - $numDaysInWeek)/$numDaysInWeek) + $weekOffset; 
     $maxWeekNum = ceil(($numberOfDaysInYear + $yearStartingDay - $numDaysInWeek)/$numDaysInWeek) + $weekOffset; 

     if($weekNum < 1) { 
      return self::getYearWeek(clone $dateTime->modify('last day of December previous year')); 
     } 

     if($weekNum > $maxWeekNum) { 
      return self::getYearWeek(clone $dateTime->modify('first day of January next year')); 
     } 

     return intval($dateTime->format('Y') . ($weekNum < 9 ? '0' . $weekNum : $weekNum)); 
    } 

ли кто-нибудь имеет некоторые лучшее решение?