2013-07-05 21 views
0
function utcconvert($time){ 
$timeformat="M j, Y g:i:s a"; 
$localtime = new DateTime($time, new DateTimeZone('America/New_York')); 
$utctime = $localtime; 
$utctime->setTimeZone(new DateTimeZone('UTC')); 
return date($timeformat, $utctime->format("U")); 
} 

我已經看到了這個方法無處不在我尋找PHP時區轉換,但我不能讓它工作。我想從默認的mysql格式中獲取時間戳,並在$ timeformat中將其轉換爲UTC時間。無法讓php DateTime時區轉換工作。它不會改變時區當我改變時區

echo utcconvert("2013-07-05 16:23:29"); 

產生

Jul 5, 2013 4:23:29 pm 

這僅僅是同一時間,轉化成該格式。我有date_default_timezone_set("America/New_York");集。

如何解決此問題將服務器時間(紐約)轉換爲UTC時間?

回答

2

當您生成從$utctime->format("U")DateTime對象你將失去任何時區信息的UNIX時間戳,它只會返回一個整數(unix stimestamp,但作爲一個字符串出於某種原因)和PHP會威脅它與當前的默認時區。

只需使用format()方法與你的日期格式的字符串:

function utcconvert($time) { 
    // ... 
    return $utctime->format($timeformat); 
} 

According to a comment on the php.net site,這背後的理由是,改變時區時DateTime對象不會改變內部的時間戳值。

1

你傳遞一個字符串作爲第二個參數,你應該通過一個int(UNIX時間戳) 嘗試:

return date($timeformat, $utctime->getTimeStamp()); 

編輯:

其實,你可以使用

return $utctime->format("U"); 

問題是,你總是返回一個新的日期,因爲你提供了一個不合適的參數。您應該檢查你的php.ini和display_errorserror_reporting所以你可以看到當PHP警告您關於這個事情