首頁 >後端開發 >php教程 >如何優雅的輸出指定時間的分鐘數?

如何優雅的輸出指定時間的分鐘數?

WBOY
WBOY原創
2016-09-03 00:14:141018瀏覽

輸出當前時間也為到來的以指定分鐘尾數結尾的的分鐘數,
如指定7 14:56:21->14:57:00
14:57:21->15:07:00
自己寫了一個感覺不夠簡單

<code>function get_minutes($dest){
    $start1 =new DateTime();
    $date = $start1 ->format('Y-m-d-H-i-s');
    list($year,$mon,$day,$hour,$min,$sec) = explode('-',$date);
    $start2 = new DateTime($year.'-'.$mon.'-'.$day.' '.$hour.':'.$min);
    $needle = floor($min/10)*10 +$dest;
    $needle = $needle > $min ? $needle : $needle +10;
    $extra = $needle - $min;
    $timestr = '+ '.$extra.' minutes';
    $start2->modify($timestr);
    return $start2->format('Y-m-d H:i:s');
}
echo get_minutes(7);</code>

回覆內容:

輸出當前時間也為到來的以指定分鐘尾數結尾的的分鐘數,
如指定7 14:56:21->14:57:00
14:57:21->15:07:00
自己寫了一個感覺不夠簡單

<code>function get_minutes($dest){
    $start1 =new DateTime();
    $date = $start1 ->format('Y-m-d-H-i-s');
    list($year,$mon,$day,$hour,$min,$sec) = explode('-',$date);
    $start2 = new DateTime($year.'-'.$mon.'-'.$day.' '.$hour.':'.$min);
    $needle = floor($min/10)*10 +$dest;
    $needle = $needle > $min ? $needle : $needle +10;
    $extra = $needle - $min;
    $timestr = '+ '.$extra.' minutes';
    $start2->modify($timestr);
    return $start2->format('Y-m-d H:i:s');
}
echo get_minutes(7);</code>

先來分析一下需求,需要的分鐘分別是7分,10+7分,20+7分,30+7分,40+7分,50+7分;另外57分到下一個節點7分也是相差10分鐘。
因為格林威治時間1970年01月01日00時00分00秒起至現在的總秒數。
第一個7分是420秒,之後都是增加600秒。
需要補的秒數就是:先當前時間除以600的餘數,小於420就直接用420去減,大於就用600+420去減。

<code class="php">$time = time();
echo date('Y-m-d H:i:s',$time);
$last = $time%600;
$last = $last<420?420-$last:1020-$last;
echo '<br />';
echo date('Y-m-d H:i:s',$time+$last);</code>

<code>function get_minutes($dest) {
    if ($dest >= 10) {
        throw new Exception('param error!');
    }
    $mitute = date('i');
    $unit   = $mitute % 10;//个位分钟数
    $offset = $dest - $unit;
    if ($dest <= $unit) {
        $offset += 10;
    }
    return date('Y-m-d H:i:00', strtotime('+' . $offset . ' minutes'));
}

echo get_minutes(7);</code>

好奇怪的需求..
我看你的代碼寫的有點複雜, 其實思路很簡單的.
就是看分鐘的個位數是不是大於7, 如果大於7, 就用17-個位數, 否則用7-個位數. 算出來的就是下個尾數為7的分鐘數與當前分鐘的差了.然後加上這個差不就行了?

<code class="php">$date = new DateTime();
$minute = $date->format('i');
$diff_minute = $minute[1] >= 7 ? (17 - $minute[1]) : (7 - $minute[1]);
$date->add(new DateInterval("PT" . $diff_minute . 'M'));
echo $date->format('Y-m-d H:i:s');</code>

給個例子, 為了方便, 把7硬編碼在裡面了. 根據你的需求改改就能用了.

<code><?php 
$dest = 7;

$dest = $dest*60;
$time = time() - $dest;
$time = ceil($time/600)*600+$dest;
echo $time;
echo date("Y-m-d H:i:s",$time);
?></code>
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn