2013-01-23 36 views
0

如何使用PHP日期/時間獲取上一個/前一個半小時的標記。PHP:獲取前一個半小時的標記

所以時間15:31一直到16:29應該給15:30,因爲這是最後的半小時標記。

我希望能夠動態更改分鐘數。 所以,如果我設定分鐘至15日,它會得到最後一個/上:15分鐘大關 所以通過15:16至16:14將返回15:15

這是我,但我不能不能讓它工作...

function newtime($time, $offset) { 
           $prev = $time - $offset; 
           $newtime = ($offset > 900) ? ($prev - 1800) : ($prev); 
           return $newtime; 
          } 

          $hours = date("H", time()); 
          $minutes = date("m", time());    
          echo 'Current date: ' . date("Y-m-d H:i:s", time()) . '<br/>'; 
          $time = strtotime("2013-01-23 15:35:00"); 
          echo 'time: ' . date("Y-m-d H:i:s", $time) . '<br/>'; 
          $offset = ($time % 1800); 
          echo 'prev: ' . $offset . '<br/>'; 
          $newtime = newtime($time, $offset); 
          echo date("Y-m-d H:i:s", $newtime) . '<br/><br/>'; 

這真的很難,我不能包裹我的頭。

任何幫助,非常感謝!

回答

3

嘗試這樣:

<? 
function newtime($time,$minute=30){ 
    $time=strtotime($time); 
    $m=date("i",$time)*1; 
    $h=date("H",$time)*1; 
    if($m<$minute){ 
     $h=$h-1; 
    } 
    return date("H:i",strtotime($h.":".$minute)); 
} 

print newtime("15:31"); 
//OUTPUT: 15:30 
print newtime("16:29"); 
//OUTPUT: 15:30 

print newtime("15:16",15); 
//OUTPUT: 15:15 
print newtime("16:14",15); 
//OUTPUT: 15:15 
?> 
+0

這個作品非常好,非常感謝你。 我現在可以修改它以支持更多的間隔和分鐘。 – tribulant

+0

我有一個類似的,但不同的解決方案來解決它的小時,然後加/減半小時(1800秒), '函數mynewtime($時,$偏移){ \t \t \t \t \t \t \t \t \t $ prev = $ time - $ offset; \t \t \t \t \t \t \t \t \t $ NEWTIME =($偏移> 1800)? ($ prev + 1800):($ prev - 1800); \t \t \t \t \t \t \t \t \t回$ NEWTIME; \t \t \t \t \t \t \t \t} \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t $時間=的strtotime( 「2013年1月23日15點41分00秒」); \t \t \t \t \t \t \t \t $偏移=($時間%3600); \t \t \t \t \t \t \t \t $ NEWTIME = mynewtime($時間,$偏移); \t \t \t \t \t \t \t \t回聲日期( 「Y-M-d H:I:S」 $ NEWTIME)。 '

';' – tribulant

2
function newtime ($time, $offset) 
{ 
    // First, calculate the offset in seconds: 
    $offset_sec = $offset * 60; 

    // Next, fetch unix timestamp from $time 
    $unix_time = strtotime($time); 

    // Then calculate the modulo 
    $modulo = $unix_time % $offset_sec; 

    // Calculate latest timestamp 
    $last_time = $unix_time - $modulo; 

    // Display latest timestamp 
    return date('H:i',$last_time); 
} 
+0

$ current_time = date('U',strtotime($ time)); 1。這不是當前的unix時間戳 - 它是$ time 的unix時間戳2. strtotime($ time)將提供與日期相同的('U',strtotime($ time)),所以日期('U'不是這裏需要... – stocker4all

+0

我知道,我第一次使用'date('U')'沒有來自用戶的輸入,並且在我的修改中有點快速,我會編輯答案 –

+1

而且,這會得到最後15 '(因爲16:31會返回16:30,因爲那也是在15點之後的一個小時內)......我誤解了這個問題,不過,我會在這裏保留這個答案,就像一個參考。 –

相關問題