我想使用 YEARWEEK 每周汇总数据,并且我希望周日作为一周的第一天。在 SQL 查询中,我使用模式 6 来聚合数据,但在 PHP 中没有等效的年周。 PHP 似乎没有更改周开始日的选项。
最佳答案
到目前为止我的解决方案
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));
}
有没有人有更好的解决方案?
关于php - MySQL WEEK() 模式 6 PHP 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21525593/