将时间戳四舍五入到小时的好的解决方案是什么?
例如,在使用 date('d.m.y h:m', time())
之后,我得到 '02.08.11 7:07'... 现在,从这里,我会喜欢有 7:00 的时间戳。
我怎样才能做到这一点?
最佳答案
更新
看到Greg Miller's "Time Programming Fundamentals" talk之后关于谷歌的 cctz C++ library ,我对我之前的回答不满意。
处理时间是一个非常复杂的话题(即使不考虑相对论效应)。我们必须尊重像 timezones with uneven offsets 这样的事情, daylight saving time , time jumps due to legislation changes或 leap seconds可能还有更多怪癖。 虽然其中许多仅在时间和空间上产生局部影响,但我们计划的用户仍然可能不幸受到影响。
长话短说
可能最好依赖像 holodoc's answer 中那样的底层函数处理时区管理的怪癖。
旧答案
如果我没记错的话,时间戳恰好从 0:00 1.1.1970 开始,所以将它除以 3600( float )然后取整/下限/上限并乘以 3600(整数)就足够了。除法必须是 float 才能使 round/ceil 起作用。
舍入示例:
round($timestamp/3600)*3600
7:20 -> 7:00
7:40 -> 8:00
地板 sample :
floor($timestamp/3600)*3600
7:20 -> 7:00
7:40 -> 7:00
天花板示例:
ceil($timestamp/3600)*3600
7:20 -> 8:00
7:40 -> 8:00
关于php - 四舍五入 PHP 时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6916229/