四舍五入PHP时间戳


Rounding PHP timestamp

将时间戳四舍五入到小时的好解决方案是什么?

例如,使用date('d.m.y h:m', time())后,我得到'02.08.11 7:07'…现在,我想从这里得到7点的时间戳。

我怎么才能做到呢?

更新

看了Greg Miller的《Time Programming Fundamentals》中关于Google的cctz c++库的讨论后,我对自己之前的回答感到不满意了。

处理时间是一个非常复杂的话题(即使在不考虑相对论效应的情况下)。我们必须尊重不均匀偏移的时区、夏令时、由于立法变化或闰秒而导致的时间跳跃,以及可能还有更多的怪事。虽然其中许多只在时间和空间上产生局部影响,但我们程序的用户仍然可能不幸受到影响。

TL;博士

最好依赖底层函数,比如holodoc的答案,来处理时区管理的问题。

老回答

当我记得正确的时间戳开始于0:00 1.1.1970,所以它应该足以除以3600(浮动),然后四舍五入/地板/天花板,乘以3600(整数)。除法必须是浮点数才能使round/ceiling生效。

舍入抽样:

round($timestamp/3600)*3600
7:20 -> 7:00
7:40 -> 8:00

地板样品:

floor($timestamp/3600)*3600
7:20 -> 7:00
7:40 -> 7:00

天花板样品:

ceil($timestamp/3600)*3600
7:20 -> 8:00
7:40 -> 8:00

有没有想过取消会议纪要?:)

echo date('d.m.y h:00', time());

如果您需要开始分钟的时间戳,只需更改data参数并使用strtotime

echo strtotime(date('d.m.Y H:00:00', time()));

将小时和分钟转换为两个不同的变量。如果分钟>= 30,则在小时上加1。

不是最优雅的解决方案,但它有效。:)

最简单的解决方案:

date('d.m.y h', time());

很少看到任何时间戳将小时四舍五入。如果时间戳显示是7:00,那就意味着它发生在第7个小时,任何时候都可以。如果你开始把时间戳四舍五入,人们会认为它发生在8小时内的任何时候……这会导致混淆。