function weeks($month, $year)
{
$num_of_days = date("t", mktime(0, 0, 0, $month, 1, $year));
$lastday = date("t", mktime(0, 0, 0, $month, 1, $year));
$no_of_weeks = 0;
$count_weeks = 0;
while ($no_of_weeks < $lastday)
{
$no_of_weeks += 7;
$count_weeks++;
}
return $count_weeks;
}
function getRangeByWeek($weekNo)
{
$firstDayOfCurrentMonth = date('Y-m-01');
$globalWeek = intval(date('W', strtotime($firstDayOfCurrentMonth)));
$globalYear = intval(date('Y', strtotime($firstDayOfCurrentMonth)));
$globalMonth = intval(date('m', strtotime($firstDayOfCurrentMonth)));
$totalNumberOfWeeks = weeks($globalMonth, $globalYear);
$date = new DateTime();
$result = [];
for ($i = 1; $i <= $totalNumberOfWeeks; $i++)
{
$startDate = $date->setISODate($globalYear, $globalWeek)->format("d M");
$endDate = $date->setISODate($globalYear, $globalWeek, 7)->format("d M");
$result[$i] = $startDate . '-' . $endDate;
$globalWeek++;
}
return $result[$weekNo];
}
echo getRangeByWeek(1);
- Извлеченная глобальная неделя с первого дня текущего месяца и требуемый год и месяц
- Взял общее количество недель в текущем месяце
- Создан пустой экземпляр DateTime для выполненияпростое вычисление и получение первой даты глобальной недели
- Увеличение глобальных недель до общего числа недель в текущем месяце
- независимо от того, какой результат был сгенерирован, я сохранял индекс как номер недели текущего месяца
- возвращаемый диапазон дат текущего номера недели текущего месяца
Вывод
28 Jan-03 Feb
Демо