我有一个UNIX格式的时间字符串。我需要将该字符串舍入到最接近30分钟的间隔。
例如:我的时间是上午9:20,而不是它应该到9:30 AM。
如果分钟大于30,就像上午9:45一样,它应该是圆到上午10:00。
到目前为止我已尝试过这个:
$hour = date('H', $ltdaytmfstr);
$minute = (date('i', $ltdaytmfstr)>30)?'00':'30';
echo "$hour:$minute";
$ltdaytmfstr
是unix格式的时间字符串。
有什么建议吗?如果我能获得以UNIX格式返回的值,那会更好。
答案 0 :(得分:2)
你应该试试这个:这会将它四舍五入到最近的半小时。
使用ceil
功能。
<?php
$rounded = date('H:i:s', ceil(strtotime('16:20:34')/1800)*1800);
echo $rounded;
?>
Output: 16:30:00
答案 1 :(得分:2)
如果您使用DateTime:
$dt = new \DateTime;
$diff = $dt
->add(
//This just calculates number of seconds from the next 30 minute interval
new \DateInterval("PT".((30 - $dt->format("i"))*60-$dt->format("s"))."S")
);
echo $dt->getTimestamp();
答案 2 :(得分:1)
由于UNIX时间以秒为单位,您可以将其转换为30分钟单位,舍入,然后转换回秒。
$timestamp = time();
$rounded = round($timestamp / (30 * 60)) * 30 * 60
如果需要,您还可以使用floor()
或ceil()
向上或向下舍入。
答案 3 :(得分:1)
我想这就是你要找的东西
function round_timestamp($timestamp){
$hour = date("H", strtotime($timestamp));
$minute = date("i", strtotime($timestamp));
if ($minute<15) {
return date('H:i', strtotime("$hour:00") );
} elseif($minute>=15 and $minute<45){
return date('H:i', strtotime("$hour:30") );
} elseif($minute>=45) {
$hour = $hour + 1;
return date('H:i', strtotime("$hour:00") );
}
}
echo round_timestamp("11:59");
// 00:00
echo round_timestamp("10:59");
// 11:00