2017-06-12 8 views
2

私はUNIX形式の時刻文字列を持っています。私は30分の最も近い間隔にその文字列を丸める必要があります。ギャップの30分のラウンドタイム文字列

例:私は午前9時20分を午前9時30分にするよりも時間があります。

分が午前9時45分のように30より大きい場合は、午前10時に丸めます。私はこれまでのところ、これを試してみました

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

$ltdaytmfstrは、UNIX形式の時間文字列です。

提案がありますか? UNIX形式で返された値を得ることができれば良いでしょう。

答えて

2

これを試す必要があります。これは、最も近い30分に丸めます。

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 AMそれは午前10時までに丸めるべきです。 '16:41'でも' 16:30'となる。 – Qirel

+0

@Qirelこれで要件を満たします。私はceilに変更しました。私に通知してくれてありがとう。 – 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