mexico_city - time zone set php
¿Se puede mejorar mi función de diferencia horaria PHP? (1)
Debajo está mi función que tomará una marca de tiempo y le dirá el tiempo que ha pasado desde ahora en el formato de 23 días 3 horas 4 minutos 6 segundos
El problema principal está en mi sitio. Uso DATETIME de mysql en lugar de TIMESTAMP. Para usar esta función, debo convertir mi datetime de mysql a una marca de tiempo y luego ejecutarla a través de mi función.
Entonces, tengo curiosidad, ¿hay una mejor manera de hacerlo? En algunas páginas donde tengo 100 resultados de mysql, PHP debe convertir 100 fechas en marcas de tiempo y luego ejecutar esto en 100 de ellas.
Me pregunto si hay un mejor método de rendimiento, y por favor no recomiendo todos los frameworks PHP (zend, etc.)
Apreciar cualquier consejo / ayuda
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;
}
Mire la documentación de la función de time
en el sitio PHP . Especialmente esto y esto .
Aquí hay un fragmento de Aidan Lister que es similar:
/**
* 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;
}