опитвам се да извадя за всеки месец в табличен вид № на седмицата , обаче функцията ми , която използвам е доста голяма (търся по кратък вариант)
Code: Select all
function getFullWeeksOfMonth($iYear, $iMonth, $sFirstDayOfWeek = 'Sunday', $bExclusive = true)
{
$iYear = filter_var($iYear, FILTER_VALIDATE_INT, array(
'options' => array(
'default' => (int) date('Y')
)
));
$iMonth = filter_var($iMonth, FILTER_VALIDATE_REGEXP, array(
'options' => array(
'default' => (int) date('m'),
'regexp' => '/^([1-9]|1[012])$/'
)
));
$aDay = array(
'monday' => 1,
'sunday' => 1
);
$sFirstDayOfWeek = filter_var($sFirstDayOfWeek, FILTER_VALIDATE_REGEXP, array(
'options' => array(
'default' => 'sunday', //Set default week
'regexp' => '/^monday|sunday$/'
)
));
$bExclusive = filter_var($bExclusive, FILTER_VALIDATE_BOOLEAN);
$oStart = new DateTime($iYear . '-' . $iMonth . '-01');
if ($bExclusive === true || ($bExclusive === false && isset($aDay[strtolower($oStart->format('l'))]))) {
if ((int) $oStart->format('d') === 1) {
$oStart->modify('-1 day');
}
$oStart->modify('first ' . $sFirstDayOfWeek . ' ' . $oStart->format('H:i'));
} else {
$oStart->modify('last ' . $sFirstDayOfWeek . ' ' . $oStart->format('H:i'));
}
$oEnd = clone ($oStart);
if ((int) $oStart->format('m') === $iMonth) {
$oEnd->modify('last day of this month');
} else {
$oEnd->modify('last day of next month');
}
$oInterval = new DateInterval('P1W7D');
$oDaterange = new DatePeriod($oStart, $oInterval, $oEnd);
$aDate = array();
$i = 1;
foreach ($oDaterange as $oDate) {
$oTestDate = clone $oDate;
$oLastWeekDay = $oTestDate->modify('+6 days');
if (((int) $oDate->format('m') === (int) $iMonth || (int) $oLastWeekDay->format('m') === (int) $iMonth) && (($bExclusive === true && (int) $oLastWeekDay->format('m') === (int) $iMonth) || ($bExclusive === false))) {
$aDate[$i]['First'] = 'W№'.$oDate->format('W').' | '.$oDate->format('Y-m-d') ;
$aDate[$i]['Last'] = $oLastWeekDay->format('Y-m-d');
}
$i++;
}
return $aDate;
}
echo "<pre>";
print_r(getFullWeeksOfMonth(2020, 2, 'Monday'));
echo "<pre>";
Array
(
[1] => Array
(
[First] => W№05 | 2020-02-02
[Last] => 2020-02-08
)
[2] => Array
(
[First] => W№06 | 2020-02-09
[Last] => 2020-02-15
)
[3] => Array
(
[First] => W№07 | 2020-02-16
[Last] => 2020-02-22
)
[4] => Array
(
[First] => W№08 | 2020-02-23
[Last] => 2020-02-29
)
)