2010-03-02 6 views
17

En supposant que j'ai un horodatage unix en PHP. Comment puis-je arrondir mon horodatage php à la minute la plus proche? Par exemple. 16:45:00 par opposition à 16:45:34?Horodatage php arrondi à la minute la plus proche

Merci pour votre aide! :)

+0

16:45:00 encore a quelques secondes ... Je pense que vous voulez dire que vous voulez arrondir à la prochaine minute la plus proche, plutôt que d'enlever des secondes. – Layke

+0

Je viens d'installer PHP alors je peux vous donner le code pour le faire. Je ne veux pas deviner parce que je déteste le temps(). Je répondrai dans 10 minutes si personne d'autre ne l'a fait. – Layke

+4

@Laykes http://codepad.org/ est bon pour faire des vérifications de code rapides – Yacoby

Répondre

49

Si l'horodatage est un horodatage de style Unix, il suffit

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

Si c'est le style que vous avez indiquée, vous pouvez simplement le convertir en un horodatage de style Unix et le dos

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

round() est utilisé comme un moyen simple de s'assurer qu'il arrondit à x pour les valeurs comprises entre x - 0.5 <= x < x + 0.5. Si vous avez toujours voulu arrondir toujours vers le bas (comme indiqué), vous pouvez utiliser floor() ou la fonction modulo

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

Yacoby, merci pour l'explication complète! Maintenant que vous l'avez mentionné, round() est la fonction que je préfère avoir. Fait plus de sens dans mon application. :) – Lyon

6

Une alternative est la suivante:

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

J'ai lu que chaque appel à time() en PHP devait aller tout le chemin à travers la pile de retour à l'OS. Je ne sais pas si cela a été changé en 5.3+ ou non? Le code ci-dessus réduit les appels à temps() ...

Code de référence:

$ 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";' 

Fait intéressant, plus de 10.000.000 itterations tous les trois font en fait en même temps;)

Questions connexes