2013-02-06 63 views
0

什麼是轉換英國的日期和時間格式的最佳方式:編寫,英國日期轉換爲相對時間PHP函數

30/01/2013 13:30:06

這是d/M/YH:我:在PHP記數法中,相對時間(即剛剛,現在,幾分鐘前,30分鐘前,3小時前,1天前等等)使用s。我已經看到了關於這個主題的幾個教程,但它們都是圍繞創建功能而沒有任何明確的解釋。我希望就此事提供一些協助。

+1

爲了澄清,你希望我們寫關於解釋的教程? – Leri

+1

[計算相對時間]可能的重複(http://stackoverflow.com/questions/11/calculating-relative-time) –

回答

4

希望這有助於

function timeSince($ptime){ 
     $etime = time() - strtotime($ptime); 

     if($etime < 1){ 
      return 'less than 1 second ago'; 
     } 

     $a = array(12 * 30 * 24 * 60 * 60 => 'year', 
        30 * 24 * 60 * 60  => 'month', 
        24 * 60 * 60   => 'day', 
        60 * 60    => 'hour', 
        60     => 'minute', 
        1     => 'second' 
     ); 

     foreach($a as $secs => $str){ 

      $d = $etime/$secs;  
      if($d >= 1){ 

       $r = round($d); 
       return ' <font style="color:#0099ff"> ' . $r . ' ' . $str . ($r > 1 ? 's' : '') . ' ago</font>'; 
      } 
     } 
    } 
+0

爲什麼複雜這樣簡單的任務?看到我的答案在下面... – phpalix

+0

我試過這種格式的日期時間29/01/2013 13:20:42但它提出了44年前 – methuselah

+0

使用此前:$ ptime = str_replace('/' ,' - ',$ ptime); –

1

dd/mm/yyyy需要根據formatting rules否則會被當作mm/dd/yyyy

$dateString = '30/01/2013 13:30:06'; 
$dateObject = new DateTime(str_replace('/', '.', $dateString)); 

與任選加入DateTimezone作爲第二個參數DateTime構造改變爲dd.mm.yyyy

然後,你可以做一個diff與當前日期,並使用dateintervals來獲得相對時間

2

使用mktime();date();

例如,如果你在格式d/m/Y H:i:s一個特定的時間,你想把它當作d-m-Y H:s:i,你會使用explode();爆炸的時間分割成塊,然後用date(new_format, mktime(current_format_chunks))

2

編寫自定義函數可能會有幫助。剪切字符串並轉換爲數字。使用mktime()創建時間戳,通過各種相對時間可能性將它與time()當前時間戳和開關(大小寫)進行比較。

1

解析日期的最直接和最友好的方式是DateTime擴展名。它有一個叫做createFromFormat靜態方法:

$date = '30/01/2013 13:30:06'; 
$format = 'j/m/Y G:i:s'; 
$time = DateTime::createFromFormat($format, $date); 
echo $time->format('l dS F \'y at H.i.s'); 

該方法採用自定義格式日期字符串。因爲您可以自己定義格式,所以比「手動」解析要容易得多。

爲了調整可以使用add()sub()modify()方法日期:

$time->add(new DateInterval('P3DT5H')); // 3 days and 5 hours 
echo $time->format('l dS F \'y at H.i.s'); 

$time->sub(new DateInterval('P9DT1H')); // 9 days and 1 hours 
echo $time->format('l dS F \'y at H.i.s'); 

$time->modify('-1 year -35 days'); 
echo $time->format('l dS F \'y at H.i.s'); 

正如你可以看到modify()方法是稍微更容易使用。另外兩種方法使用DateInterval類和一個尷尬的格式。這並不困難(只是閱讀文檔並按照說明來做),但使用真正的單詞(即「-3天-7小時」)更易於理解。