将php时间戳舍入到最近的分钟

时间:2010-03-02 16:11:52

标签: php timestamp

假设我在PHP中有一个unix时间戳。如何将我的php时间戳舍入到最近的分钟?例如。 16:45:00而不是16:45:34?

感谢您的帮助! :)

4 个答案:

答案 0 :(得分:53)

如果时间戳是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;

答案 1 :(得分:6)

另一种选择是:

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

我已经读过PHP中对time()的每次调用都必须在堆栈中一直回到操作系统。我不知道这是否已经在5.3+中改变了?上面的代码减少了对time()...

的调用

基准代码:

$ 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个itterations三个实际上同时执行;)

答案 2 :(得分:2)

啊,坝啊。打败我吧:)。

这也是我的解决方案。

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

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

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

答案 3 :(得分:0)

只需使用以下内容:

$last_hour   = date('Y-m-d H:00:00') // to last hour;
$last_minute = date('Y-m-d H:i:00')  // to last minute;

我用它来删除我的数据库中具有到期日期(+ 5 分钟宽限期)的旧购物车:

// clean expired shopping carts
function shop_clean_carts($grace = 5) {
    
    $expiry = date('Y-m-d H:i:00', strtotime("-$grace minutes"));
    $q      = "DELETE FROM `shop__cart` 
               WHERE `expiry` < '$expiry'
               AND `expiry` IS NOT NULL
               AND `fk_order_id` IS NULL";
    $db->query($q);
    
    return;
}
<块引用>

这对 mySql NOW() 更好,因为查询将被缓存。