Before PHP 5.3, finding the difference between two dates was a bit of a pain. Convert the date strings to UNIX timestamps (if they weren’t already), subtract them, and then divide the result until you had each of the components (seconds, minutes, et cetera). As of PHP 5.3+ you can leverage the DateTimeInterface:

$today      = new DateTime('now');
$tomorrow   = new DateTime('tomorrow');
$difference = $today->diff($tomorrow);

echo $difference->format('%h hours %i minutes %s seconds until tomorrow');

Not much to it, but it could be better as it would display zero values like “0 hours” or plurals when it should be singular, like “1 minutes”. To do that, we would want to grab the individual values, check if we should even display the value and then pluralize it:

$h = $difference->format('%h');
$m = $difference->format('%i');
$s = $difference->format('%s');

if ($h) {
  echo sprintf(ngettext('%d hour', '%d hours', $h), $h) . ' ';

if ($m) {
  echo sprintf(ngettext('%d minute', '%d minutes', $m), $m) . ' ';

if ($s) {
  echo sprintf(ngettext('%d second', '%d seconds', $s), $s) . ' ';

echo 'until tomorrow';

And since I’m feeling frisky, let’s try this again with even less code:

$values = array(
  'hour'   => $difference->format('%h'),
  'minute' => $difference->format('%i'),
  'second' => $difference->format('%s'),

foreach ($values as $word => $val) {
  if ($val) {
    echo sprintf(ngettext('%d ' . $word, '%d ' . $word . 's', $val), $val) . ' ';

echo 'until tomorrow';

p.s. If you’re not using PHP 5.3+ you really should be looking for a tutorial on how to upgrade, not this post ;)

Did you enjoy this post?

Cool if I slip into your inbox with more?
Full posts, 1-2 times per week: