Может быть что-то вроде этого:
Вам нужно только указать дату для первого месяца и массив недель, чтобы исключить.
function excludeWeeks($dateStart, $excludeWeeks) {
$finalDates = [];
$date = new DateTime($dateStart);
$daysInMonth = date("t", strtotime($dateStart));;
$firstOfMonth = strtotime(date("Y-m-01", strtotime($date->format('Y-m-d'))));
$modifiedDate = $date->format('Y-m-d');
for ($i = 0; $i <= $daysInMonth; $i++) {
if($i > 0) {
$modifiedDate = $date->modify('+ 1 day')->format('Y-m-d');
}
$weekNumber = intval(date("W", strtotime($modifiedDate))) - intval(date("W", $firstOfMonth)) + 1;
if(!in_array($weekNumber, $excludeWeeks)) {
$finalDates[] = $modifiedDate;
}
}
print_r($finalDates);
}
excludeWeeks('2020-04-1', ["3"]);
Будет напечатано:
Array ( [0] => 2020-04-01 [1] => 2020-04-02 [2] => 2020-04-03 [3] => 2020-04-04 [4] => 2020-04-05 [5] => 2020-04-06 [6] => 2020-04-07 [7] => 2020-04-08 [8] => 2020-04-09 [9] => 2020-04-10 [10] => 2020-04-11 [11] => 2020-04-12 [12] => 2020-04-20 [13] => 2020-04-21 [14] => 2020-04-22 [15] => 2020-04-23 [16] => 2020-04-24 [17] => 2020-04-25 [18] => 2020-04-26 [19] => 2020-04-27 [20] => 2020-04-28 [21] => 2020-04-29 [22] => 2020-04-30 [23] => 2020-05-01 )
На основании вашего комментария вы можете сделать следующее:
<code>function excludeWeeks($dateStart, $dateEnd, $excludeWeeks) {
$totalDays = strtotime($dateEnd) - strtotime($dateStart);
$totalDays = round($totalDays / (60 * 60 * 24));
$finalDates = [];
$dateStart = new DateTime($dateStart);
$modifiedDate = $dateStart->format('Y-m-d');
for ($i = 0; $i < $totalDays; $i++) {
if($i > 0) {
$modifiedDate = $dateStart->modify('+ 1 day')->format('Y-m-d');
}
$weekNumber = (int)$i/7 + 1;
if(!in_array( (int)$weekNumber, $excludeWeeks)) {
$finalDates[] = $modifiedDate;
}
}
print("<pre>".print_r($finalDates,true)."
");} excludeWeeks ('2020-04-1', '2020-06-18', [" 2 "," 4 "," 6 "," 8 "," 10 "]);
Это исключит все недели (не по календарю, но, как вы сказали, 7 дней) и напечатает что-то вроде:
Array
(
[0] => 2020-04-01
[1] => 2020-04-02
[2] => 2020-04-03
[3] => 2020-04-04
[4] => 2020-04-05
[5] => 2020-04-06
[6] => 2020-04-07
[7] => 2020-04-15
[8] => 2020-04-16
[9] => 2020-04-17
[10] => 2020-04-18
[11] => 2020-04-19
[12] => 2020-04-20
[13] => 2020-04-21
[14] => 2020-04-29
[15] => 2020-04-30
[16] => 2020-05-01
[17] => 2020-05-02
[18] => 2020-05-03
[19] => 2020-05-04
[20] => 2020-05-05
[21] => 2020-05-13
[22] => 2020-05-14
[23] => 2020-05-15
[24] => 2020-05-16
[25] => 2020-05-17
[26] => 2020-05-18
[27] => 2020-05-19
[28] => 2020-05-27
[29] => 2020-05-28
[30] => 2020-05-29
[31] => 2020-05-30
[32] => 2020-05-31
[33] => 2020-06-01
[34] => 2020-06-02
[35] => 2020-06-10
[36] => 2020-06-11
[37] => 2020-06-12
[38] => 2020-06-13
[39] => 2020-06-14
[40] => 2020-06-15
[41] => 2020-06-16
[42] => 2020-06-17
)
Вы можете использовать любые startTime и endTime.