Круглая отметка времени php до ближайшей минуты - PullRequest
19 голосов
/ 02 марта 2010

Предполагая, что у меня есть метка времени Unix в PHP. Как я могу округлить свою временную метку php до ближайшей минуты? Например. 16:45:00 вместо 16: 45: 34?

Спасибо за вашу помощь! :)

Ответы [ 3 ]

53 голосов
/ 02 марта 2010

Если временная метка является временной меткой в ​​стиле Unix, просто

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

Если это стиль, который вы указали, вы можете просто преобразовать его в метку времени в стиле Unix и обратно

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

round() используется как простой способ обеспечения округления до x для значений между x - 0.5 <= x < x + 0.5. Если вы всегда хотели всегда округлять (как показано), вы можете использовать floor() или функцию по модулю

$rounded = floor($time/60)*60;
//or
$rounded = time() - time() % 60;
6 голосов
/ 23 сентября 2011

Альтернатива такова:

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

Я читал, что каждый вызов time() в PHP должен был проходить через стек обратно к ОС. Я не знаю, было ли это изменено в 5.3+ или нет? Приведенный выше код сокращает количество звонков на время () ...

Код эталона:

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

Интересно, что более 10 000 000 итераций все три фактически делают одно и то же время;)

2 голосов
/ 02 марта 2010

Ах, черт. Обыграй меня:)

Это было и мое решение.

<?php 
$round = ( round ( time() / 60 ) * 60 );

echo date('h:i:s A', $round );
?>

http://php.net/manual/en/function.time.php

...