Dateranges consecutivos em PHP

Esta é uma questão de acompanhamento para a minha pergunta anterior aqui: alguns ajudam a “sincronizar” dois loops em PHP

Eu quero fazer uma lista de datas e mostrar como intervalos se sua data for igual ou máxima de 1 dia.

Esta é a saída do meu database:

+-----+------------+ | uid | date | +-----+------------+ | 39 | 2014-09-17 | | 46 | 2014-09-18 | | 40 | 2014-09-19 | | 48 | 2014-09-19 | | 45 | 2014-09-20 | | 47 | 2014-12-05 | +-----+------------+ 

Este é o HTML que eu quero gerar:

Contrato de 17/09/2014 a 20/09/2014

UIDS: 39-46-40-48-45


Contrato de 12/05/2014

UIDS: 47


Este é o meu código fonte

 prepare($query); $sth->execute(); if($sth->rowCount() > 0) { $i = 0; while($row = $sth->fetch()) { // CURRENT DATE $date = new DateTime($row['date']); // STORAGE $item = array( 'date' => array(), 'var' => $row['uid'], // A '-' delimited variable of all the uids in the range (40-41-...) 'uids' => array() // An array of all the uids in the range ); // IF THE DATE DIFF IS LESS THAN OR EQUAL TO ONE DAY if ($item['date'] === $lastitem['date'] && $date->diff($lastdate)->days format('d/m/Y'); $output .= isset($item['date']['end']) ? ' to ' . $item['date']['end']->format('d/m/Y') : ''; $output .= '
Uids: '.$item['var']; } foreach ($list AS $item) { // Loop over the dates in this range $output .= $item['date'].'
'; } if(count($list)) { // Line under this range $output .= '
'; } echo $output; ?>

Por algum motivo, meu código retorna 4 faixas em vez de 2. Eu tentei descobrir por horas por quê. Alguém pode me ajudar? Este é o HTML defeituoso:

Contrato de 17/09/2014 a 18/09/2014

UIDS: 39-46


Contrato de 19/09/2014

UIDS: 40


Contrato de 19/09/2014 a 20/09/2014

UIDS: 48-45


Contrato de fechamento 05/12/2014

UIDS: 47

Alguém pode ser de ajuda?