Why not just use a DateInterval:
PHP Code:
date_default_timezone_set('UTC');
$dts = new DateTime('05-11-2012 23:15:00');
$dte = new DateTime('06-11-2012 01:15:00');
$di = $dte->diff($dts, true);
print $di->format('%H:%I:%S');
The object properties can be inspected as well to see what to show. If its <> 0, then its different in some way shape or form, so you can tack on things like years and months systematically this way.