2011-02-13 58 views
0

我有字符串格式像這樣datetime數據:PHP的strtotime()函數返回的空白/ 0

Sat Mar 24 23:59:59 GMT 2012 

我想這個轉換爲UTC時間戳記,但是當我嘗試它,如下所示:

function texttotime($texttime) 
{ 
    if(!$texttime || $texttime=="") 
     return NULL; 

    // Sat Mar 24 23:59:59 GMT 2012 
    $bits = preg_split('/\s/', $texttime); 

    //     Mar  24  2012 23:59:59 GMT 
    return strtotime("$bits[1] $bits[2] $bits[5] $bits[3] bits[4]"); 
} 

它輸出0(不是NULL)。

如果我改變最後一行:(由-4個小時左右,但錯誤的時間戳,截止)

//     Mar  24  2012 23:59:59 
    return strtotime("$bits[1] $bits[2] $bits[5] $bits[3]"); 

它輸出的東西。

+0

strt otime('Sat Sat 24 24:59:59 GMT 2012')沒有任何問題 – Nazariy 2011-02-13 17:09:29

回答

1

不太清楚爲什麼你會重新組織現有的字符串,如...

echo $timestamp = strtotime('Sat Mar 24 23:59:59 GMT 2012'); 

...正常工作。 (它返回1332633599,你可以通過date('r', 1332633599);查詢(這將導致「星期六,2012年3月24日23時59分59秒+0000」,所以一切都很好。)

這就是說,如果你打算提取所有字符串的組成部分,你還不如用mktime例如:

function texttotime($texttime) { 
    if(!$texttime || $texttime=="") return NULL; 

    list($junk, $month, $day, $time, $timezone, $year) = explode(' ', $texttime); 
    list($hour, $minute, $second) = explode(':', $time); 

    return mktime($hour, $minute, $second, $month, $day, $year); 
} 
+1

您的意思是:list($ hour,$ minute,$ second)= explode(':',$ time); ? – 2011-02-13 17:15:03

1

你有4個小時的時差是由服務器時區造成的原因是-4從GMT 小時嘗試定義。您目前的時區是這樣的:

date_default_timezone_set('Europe/London'); 

$result = strtotime('Sat Mar 24 23:59:59 GMT 2012'); 

echo date('r', $result);//Sat, 24 Mar 2012 23:59:59 +0000