2017-07-28 30 views
1

我想時間從我的默認網站的時間是PT紐約轉換,我只是想將它轉換一次從數據庫中提取其繼承人我的代碼如何轉換時間PHP,使其轉化PT CT檢查

date_default_timezone_set('America/Los_Angeles') ; 
$site_time = date("H:i:s",time()) ; 

此插入在PT時間

$insert_chat = mysqli_query($conn, "INSERT INTO chat (time) VALUES 
'$site_time'"); 

$select = mysqli_query($conn, "SELECT time FROM chat") ; 

while ($row = mysqli_fetch_array($select)){ 

    $chat_time = $row['time'] ; 

我拉從數據庫中的PT時間後,我想轉換到紐約CT

 date_default_timezone_set('America/New_York') ; 

    $user_time = date("h:i A",strtotime($chat_time)) ; 

    echo $user_time ; 

但是,當我回音的時候它仍然顯示PT,我是不是做錯了什麼

+0

如果這是新數據,我建議將時間存儲在時區非特定方法(如UTC)中,然後在顯示或輸出上進行轉換。這樣,當您將操作移至其他時區時,您不必擔心數據庫當前持有的時間。如果你已經存儲了數據,那麼你可能會很滿意你需要做什麼。免責聲明:我_HATE_日期/時間。 – Shawn

+0

唉謝謝男人多數民衆贊成如此真正的兄弟,只使用默認時間()是使用'UTC'相同? –

回答

1

一個可行的解決方案使用PHP的標準對象:

$dt = new DateTime(
    '2017-01-01 09:00:00', 
    new DateTimeZone('America/Los_Angeles') 
); 
$dt->setTimezone(new DateTimeZone('America/New_York')); 
echo $dt->format("h:i A"); // 12:00 PM 

在你的代碼會發生什麼事是,$chat_time沒有與之相關的時區它;這只是一個字符串。調用date_default_timezone_set對此沒有影響。當您撥打date時,它只會格式化字符串。

+0

所以它是正確的,像這樣輸入我的默認時間$ dt = new DateTime(date(Ydm H:i:s),new DateTimeZone('America/Los_Angeles')? –

+0

不知道什麼是錯的,但是當我輸入$ dt =新日期時間( date('Ymd H:i:s',time()), new DateTimeZone('America/Los_Angeles') );它給我9:51但是它在11:51在洛杉磯現在 –

+0

如果你調用'time()',它將在執行環境中使用全局時區,在代碼的前面調用'date_default_timezone_set'會改變全局時區,如果你的情況已經有時間作爲字符串('$ chat_time')。你可以在我的代碼中插入這個變量(第2行),然後通過創建一個帶有時間字符串和DateTimeZone對象的新DateTime對象,DateTime對象被配置並且可以被突變( 'setTimezone')並觸發到pri nt輸出('format')。 – linden2015