Moin,
Du brauchst das auch nicht zu Fuß aufzusetzen, denn DatePeriod gibt dir bereits eine Liste mit dem gewünschten Interval zwischen Start und Ende.
passt das so besser?
$begin = new DateTime( '2018-01-01' );
$end = new DateTime( '2018-01-18' );
$end = $end->modify( '+1 day' );
$diff = $begin->diff($end);
$interval = new DateInterval('P1D');
$daterange = new DatePeriod($begin, $interval ,$end);
$i = 0;
foreach($daterange as $date){
echo $date->format("d.m.Y") . "<br>";
$i++;
}
echo "<br><br>";
echo $i . " Tage ";