2009-08-28 9 views
4

ci-dessous est ma fonction qui prendra un horodatage et vous dire le temps écoulé à partir de maintenant dans le format de 23 jours 3 heures 4 minutes 6 secondesEst-ce que ma fonction de différence de temps PHP peut être améliorée?

Le principal problème est sur mon site j'utiliser DATETIME mysql Au lieu de TIMESTAMP, pour utiliser cette fonction, je dois convertir mon datetime de mysql en timestamp, puis l'exécuter via ma fonction. Donc, je suis curieux, y at-il une meilleure façon de faire cela, sur certaines pages où j'ai 100 résultats mysql, PHP doit convertir 100 dates en horodatages et ensuite exécuter sur 100 d'entre eux.

Je me demande s'il y a une meilleure méthode de performance, et s'il vous plaît ne recommande pas tous les frameworks PHP (zend, etc.)

Appréciez des conseils/aide

function duration($timestamp) { 
    $years = floor($timestamp/(60 * 60 * 24 * 365)); 
    $timestamp %= 60 * 60 * 24 * 365; 
    $weeks = floor($timestamp/(60 * 60 * 24 * 7)); 
    $timestamp %= 60 * 60 * 24 * 7; 
    $days = floor($timestamp/(60 * 60 * 24)); 
    $timestamp %= 60 * 60 * 24; 
    $hrs = floor($timestamp/(60 * 60)); 
    $timestamp %= 60 * 60; 
    $mins = floor($timestamp/60); 
    $secs = $timestamp % 60; 
    $str = ""; 
    if ($years == 1) { 
     $str .= "{$years} year "; 
    }elseif ($years > 1) { 
     $str .= "{$years} yearss "; 
    } 
    if ($weeks == 1) { 
     $str .= "{$weeks} week "; 
    }elseif ($weeks > 1) { 
     $str .= "{$weeks} weeks "; 
    } 
    if ($days == 1) { 
     $str .= "{$days} day "; 
    }elseif ($days > 1) { 
     $str .= "{$days} days "; 
    } 
    if ($hrs == 1) { 
     $str .= "{$hrs} hour "; 
    }elseif ($hrs > 1) { 
     $str .= "{$hrs} hours "; 
    } 
    if ($mins == 1) { 
     $str .= "{$mins} minute "; 
    }elseif ($mins > 1) { 
     $str .= "{$mins} minutes "; 
    } 
    if ($mins < 1 && $secs >= 1) { 
     $str .= "{$secs} seconds "; 
    } 
    return $str; 
} 

Répondre

6

Ne prenez un coup d'oeil à la documentation pour la fonction time à the PHP site. Spécialement this et this.

Voici un extrait by Aidan Lister qui est similaire:

/** 
* A function for making time periods readable 
* 
* @author  Aidan Lister <[email protected]> 
* @version  2.0.0 
* @link  http://aidanlister.com/2004/04/making-time-periods-readable/ 
* @param  int  number of seconds elapsed 
* @param  string which time periods to display 
* @param  bool whether to show zero time periods 
*/ 
function time_duration($seconds, $use = null, $zeros = false) 
{ 
    // Define time periods 
    $periods = array (
     'years'  => 31556926, 
     'Months' => 2629743, 
     'weeks'  => 604800, 
     'days'  => 86400, 
     'hours'  => 3600, 
     'minutes' => 60, 
     'seconds' => 1 
     ); 

    // Break into periods 
    $seconds = (float) $seconds; 
    foreach ($periods as $period => $value) { 
     if ($use && strpos($use, $period[0]) === false) { 
      continue; 
     } 
     $count = floor($seconds/$value); 
     if ($count == 0 && !$zeros) { 
      continue; 
     } 
     $segments[strtolower($period)] = $count; 
     $seconds = $seconds % $value; 
    } 

    // Build the string 
    foreach ($segments as $key => $value) { 
     $segment_name = substr($key, 0, -1); 
     $segment = $value . ' ' . $segment_name; 
     if ($value != 1) { 
      $segment .= 's'; 
     } 
     $array[] = $segment; 
    } 

    $str = implode(', ', $array); 
    return $str; 
} 
Questions connexes