2009-08-28 75 views
4

下面是我的功能,将采取一个时间戳,告诉你,从现在的23天格式中通过3小时4分6秒可以将我的PHP时间差,功能得到改善呢?

主要的问题是在我的网站我使用MySQL的DATETIME时间而不是TIMESTAMP的所以要使用这个功能我必须将时间值转换从MySQL到一个时间戳,然后通过我的功能运行。

所以我很好奇,有没有更好的方式来做到这一点,在一些网页上,我有100个MySQL的结果,PHP必须100个日期转换为时间戳,然后对其中100运行此。

我只是想知道是否有更好的表现方法,请不要推荐所有的PHP框架(Zend公司等)

感谢任何提示/帮助

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; 
} 

回答

6

你做的一切一看文档的time功能在the PHP site。特别thisthis

这里是一个片段by Aidan Lister类似:

/** 
* 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; 
}