2012-03-13 80 views
1

我期待中提取出來的時候這個字符串解析字符串時

Tue, 13 Mar 2012 04:48:34 -0400 

我知道的strtotime可以工作,但我對如何只得到04:48:34從串出我不知道implemation的

感謝

+0

如果時區不是「-0400」,該怎麼辦?你真的只想忽略時區嗎? – 2012-03-13 08:55:38

+0

99.999%的網頁開發人員不關心時區(Autolycus對你沒有任何關係)。他們*可能*只在網站成爲國際時才關心...... – 2012-03-13 09:03:45

回答

4

你可以使用date_parse,它以日期/時間部分作爲單獨的元素返回一個數組。然後你可以提取時間部分,例如

$dateString = 'Tue, 13 Mar 2012 04:48:34 -0400'; 
$dateParts = date_parse($dateString); 
$timeString = $dateParts['hour'] . ':' . $dateParts['minute'] . ':' . $dateParts['second']; 

或者更好,如果你有PHP5.3,你可以使用DateTime class

$dateString = 'Tue, 13 Mar 2012 04:48:34 -0400'; 
$date = new DateTime($dateString); 
echo $date->format('H:i:s'); 
+0

優秀!不知道關於DateTime類在PHP 5.3 + – Autolycus 2012-03-13 09:03:24

+0

你會碰巧知道如果使用這個類,我可以找到下一個壁櫥小時。就像在這種情況下,它會是5 – Autolycus 2012-03-13 09:08:40

+0

@Autolycus取決於「下一個最近的小時」的含義。這聽起來像是另一個問題。如果您遇到問題,請隨時發佈併發布另一個問題。 – liquorvicar 2012-03-13 09:27:14

2

嘗試

echo date('H:i:s',strtotime($str)); 
-1

也許你可以使用sscanf功能?

這裏的「自制」的解決方案,工作原理:

$r = sscanf ('Tue, 13 Mar 2012 04:48:34 -0400' , '%s %d %s %d %02d:%02d:%02d %d'); 
if (count($r)==7) { 
    $hh = intval($r[4]); 
    $mn = intval($r[5]); 
    $ss = intval($r[6]); 
    if (
    ($hh>=0) && ($hh<=23) && 
    ($mn>=0) && ($mn<=59) && 
    ($ss>=0) && ($ss<=59) 
) { 
    /* Time is valid, use it 


    */ 
    } 
} 
0

不知道,如果存在,可以爲你做到這一點的具體方法,而是把我的頭頂部:

echo date('H:m:s'); 
+0

這將返回當前小時:分鐘:秒,因爲您沒有傳入Unix時間戳(日期的第二個參數)。 – MetalFrog 2012-03-13 19:21:29