Подтвердить что ты не робот

Раунд php timestamp до ближайшей минуты

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

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

4b9b3361

Ответ 1

Если метка времени - это временная метка стиля 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() или функцию modulo

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

Ответ 2

Альтернативой является следующее:

$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 итераций все три фактически выполняют одно и то же время;)

Ответ 3

А плотина. Ударь меня в это:)

Это тоже мое решение.

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

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

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