<?php

$start = '2005-01-01';
$days = 3520;

$datetime = new DateTimeImmutable($start);

$backups = [];

function delete($date) {
    global $backups;
    $index = array_search($date, $backups);
    if ($index !== false) {
        echo "Removing $date \n";
        unset($backups[$index]);
        return true;
    }
}

for ($i = 0; $i <= $days; $i++) {
    $backups[] = $datetime->format('Y-m-d');

    $dow = $datetime->format('N');
    
    if ($dow === '1') {
        $date = $datetime->modify('-28 days');
        $day = $date->format('j');
        if ($day > 7) {
            $date = $date->format('Y-m-d');
            delete($date);
        }

        $date = $datetime->modify('-364 days');
        $day = $date->format('j');
        $month = $date->format('n');
        if ($day <= 7 && $month > 1 ) {
            $date = $date->format('Y-m-d');
            delete($date);
        }
    } else {
        $date = $datetime->modify('-7 days')->format('Y-m-d');
        delete($date);
    }
    $datetime = $datetime->modify("+1 day");
}

print_r(array_values($backups));

