# Posted By

uberdragon on 03/17/11

# Statistics

Viewed 212 times
Favorited by 1 user(s)

# Function to return amount of time between two unix time stamps as it would be verbalized.

/ Published in: PHP  Display amount of time distance between two timestamps in the 2 largest possible time frame terms, adding plural when appropriate. If the second parameter for ending time stamp is left blank the current time() is used.

usage: `echo timeSince(1300000006,1300162842); // will echo 1 day, 21 hours` and `echo timeSince(1300162702,1300162842); // will echo 2 minutes, 20 seconds`

The last parameter is the number of time units to display (ie: 2 might display minutes, seconds while 3 will display hours, minutes seconds). This defaults to 2.

Copy this code and paste it in your HTML
`function timeSince(\$start,\$end='',\$units=2) { // \$start and \$end should be Unix time() format     // Common time periods as an array of arrays    \$periods = array(        array(60 * 60 * 24 * 365 , 'year'),        array(60 * 60 * 24 * 30 , 'month'),        array(60 * 60 * 24 * 7, 'week'),        array(60 * 60 * 24 , 'day'),        array(60 * 60 , 'hour'),        array(60 , 'minute'),        array(1 , 'second'),    );     \$end = (!empty(\$end))?\$end:time(); // if no end timestamp given use the current one for end date    \$since = \$end - \$start; // Find the difference of time between now and the past                            // \$end and \$start input could be swapped in order to find the time 'until' ;)    // Loop around the periods, starting with the biggest    for (\$i = 0, \$j = count(\$periods); \$i < \$j; \$i++){            \$seconds = \$periods[\$i];        \$name = \$periods[\$i];         // Find the biggest whole period        if ((\$count = floor(\$since / \$seconds)) != 0){            break;        }    }     \$output = (\$count == 1) ? '1 '.\$name : "\$count {\$name}s";    \$deducted = (\$seconds * \$count);     for(\$z = 1, \$j = count(\$periods); \$z < \$j; \$z++) {      if (\$units > \$z && \$i + \$z < \$j){          // Retrieving the next requested relevant period          \$seconds = \$periods[\$i + \$z];          \$name = \$periods[\$i + \$z];           // Only show it if it's greater than 0          if ((\$count = floor((\$since - \$deducted) / \$seconds)) != 0){              \$deducted = \$deducted+(\$seconds * \$count);              \$output .= (\$count == 1) ? ', 1 '.\$name : ", {\$count} {\$name}s";          }      }    }     return \$output;}` Subscribe to comments