PHP date manipulation, output multiple dates as formatted string

PHP Dates are wonderful things +1 year for example. However I’m getting myself in a bit of a mess. I have three dates spanning two months and I want to make an elegant string
“28, 29 February & 1 March” from an array of 3 dates in the form YYYYMMDD. The exact number of dates is not known, minimum 1 probable max 4

Other than some rather tortuous str_replace manipulation, how do I get from the output of this to my desired format?

NB: no more than 2 months, maybe all in one month.

$dates_array = ['20240228', '20240229', '20240301'];

foreach ($dates_array as $date) :
  $datetimes[]  = new DateTime($date);
endforeach;

// print_r($datetimes);

foreach ($datetimes as $key=>$date) :
  $month = $date->format('F');
  $day = $date->format('j');                                    
  $date_array[]= $day." ".$month." & ";
endforeach;

$date_string =  join( ' ', $date_array ) ;

echo $date_string;

// 28 February & 29 February & 1 March &