2017-06-12 33 views
2

我在UNIX格式中有一個時間字符串。我需要將該字符串舍入到30分鐘的最近間隔。30分鐘差距的回合時間字符串

例如:我有9點20分的時間,比它應該到9點30分。

如果上午9:45分鐘大於30,則應輪到上午10:00。

到目前爲止,我已經試過這樣:

$hour = date('H', $ltdaytmfstr); 
$minute = (date('i', $ltdaytmfstr)>30)?'00':'30'; 
echo "$hour:$minute"; 

$ltdaytmfstr是UNIX格式的時間字符串。

有什麼建議嗎?如果我能得到以UNIX格式返回的值會更好。

回答

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

這將不符合要求,即「*如果分鐘比30就像9更大:上午45點,它應該輪到上午10點。*「。在16:41時,它仍然是'16:30'。 – Qirel

+0

@Qirel現在它會符合要求..我改變它的細胞..謝謝你通知我。 – NID

+0

謝謝你爲我工作! –

1

由於UNIX時間以秒爲單位,你可以把它轉換到30分鐘爲單位,圓形,轉換回秒。

$timestamp = time(); 
$rounded = round($timestamp/(30 * 60)) * 30 * 60 

您還可以使用floor()ceil()如果需要四捨五入向上或向下。

2

如果使用日期時間:

$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(); 
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 
相關問題