Раунд php timestamp до ближайшей минуты
Предполагая, что у меня есть временная метка unix в PHP. Как я могу округлить метку времени php до ближайшей минуты? Например. 16:45:00 в отличие от 16:45:34?
Спасибо за вашу помощь!:)
Ответы
Ответ 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