Return to Snippet

Revision: 43124
at March 17, 2011 07:37 by uberdragon


Initial Code
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][0];
        $name = $periods[$i][1];
       
        // 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][0];
          $name = $periods[$i + $z][1];
         
          // 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;
}

Initial URL


Initial Description
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.

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

Initial Tags


Initial Language
PHP