在30分钟的间隙中的圆形时间串

时间:2017-06-12 12:59:44

标签: php

我有一个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格式返回的值,那会更好。

4 个答案:

答案 0 :(得分:2)

你应该试试这个:这会将它四舍五入到最近的半小时。

使用ceil功能。

<?php

 $rounded = date('H:i:s', ceil(strtotime('16:20:34')/1800)*1800);
 echo $rounded;


?>

Output: 16:30:00

http://codepad.org/4WwNO5Rt

答案 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