I solved the same problem like this
First you store each posts in another array called $events_by_date
with date as the index. If another event post falls in the same date you put that post under the same index.
Please comment if you need further explanation.
<?php
//setup your wp_query parmeters to make the query
$calendar_results = new WP_Query( $wp_query_params );
$events_by_date = array();
while ( $calendar_results->have_posts() ) : $calendar_results->the_post();
//$date_group = strtotime($calendar_results->post->post_date);
$date_group = strtotime(date('Y-m-d',$date_group));
$events_by_date[$date_group][] = $calendar_results->post;
endwhile;
global $post;
foreach($events_by_date as $date_heading=>$rows) {
echo '<h2 class="published-date">',
ucfirst( strftime( '%A %d %b',$date_heading ) ) ,
'</h2>';
foreach ($rows as $post ) {
setup_postdata($post) ;
get_template_part( 'content', $template );
}
}
wp_reset_query();