2010-03-02 25 views
17

Suponiendo que tengo una marca de tiempo Unix en PHP. ¿Cómo puedo redondear mi marca de tiempo php al minuto más cercano? P.ej. 16:45:00 a diferencia de 16:45:34?Round php timestamp al minuto más cercano

Gracias por su ayuda! :)

+0

16:45:00 todavía tiene segundos ... Creo que quieres decir que quieres redondear al próximo minuto más cercano, en lugar de eliminar los segundos. – Layke

+0

Acabo de instalar PHP, así que puedo darle el código para hacerlo. No quiero adivinar porque odio el tiempo(). Voy a responder en 10 minutos si nadie más tiene. – Layke

+4

@Laykes http://codepad.org/ es bueno para hacer verificaciones rápidas de código – Yacoby

Respuesta

49

Si la marca de tiempo es una marca de tiempo Unix estilo, simplemente

$rounded = round($time/60)*60; 

Si es el estilo que se indica, sólo tiene que convertirlo en una marca de tiempo Unix estilo y la espalda

$rounded = date('H:i:s', round(strtotime('16:45:34')/60)*60); 

round() se usa como una forma simple de asegurar que se redondea a x para valores entre x - 0.5 <= x < x + 0.5. Si usted siempre quiso redondear siempre hacia abajo (como se indica) se puede utilizar floor() o la función módulo

$rounded = floor($time/60)*60; 
//or 
$rounded = time() - time() % 60; 
+0

Yacoby, gracias por la explicación completa! Ahora que lo mencionas, round() es la función que prefiero tener. Tiene más sentido en mi aplicación. :) – Lyon

6

Una alternativa es la siguiente:

$t = time(); 
$t -= $t % 60; 
echo $t; 

He leído que cada llamada a time() en PHP tuvo que recorrer todo el camino a través de la pila de nuevo al sistema operativo. No sé si esto ha sido cambiado en 5.3+ o no? El código anterior reduce las llamadas a tiempo() ...

código de referencia:

$ php -r '$s = microtime(TRUE); for ($i = 0; $i < 10000000; $i++); $t = time(); $t -= $t %60; $e = microtime(TRUE); echo $e - $s . "\n\n";' 

$ php -r '$s = microtime(TRUE); for ($i = 0; $i < 10000000; $i++); $t = time() - time() % 60; $e = microtime(TRUE); echo $e - $s . "\n\n";' 

$ php -r '$s = microtime(TRUE); for ($i = 0; $i < 10000000; $i++); $t = floor(time()/60) * 60; $e = microtime(TRUE); echo $e - $s . "\n\n";' 

Curiosamente, más de 10 millones itterations los tres realmente hacen al mismo tiempo;)

Cuestiones relacionadas