将 php 时间戳舍入到最接近的分钟
假设我在PHP中有一个Unix时间戳。如何将 php 时间戳舍入到最接近的分钟?例如 16:45:00 而不是 16:45:34?
感谢您的帮助!:)
假设我在PHP中有一个Unix时间戳。如何将 php 时间戳舍入到最接近的分钟?例如 16:45:00 而不是 16:45:34?
感谢您的帮助!:)
如果时间戳是 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;
另一种选择是这样的:
$t = time();
$t -= $t % 60;
echo $t;
我已经读到,PHP中的每个调用都必须通过堆栈一直返回到操作系统。我不知道这在5.3+中是否被改变了?上面的代码减少了对time()...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次的itters,这三者实际上同时进行;)