2016-09-07 19 views
0

格式字符P I有UTC時間根據15:00:00創建時間在PHP

時區UTC偏移量是+03:00

,當我試圖使用UTC時間來創建新的時間+ utc偏移量,它顯示12:00:00。

但我需要的時間是18:00:00

請給我建議。

$UTC_offset="+03:00"; 
date("d M, Y h:i A", strtotime("15:00:00 ".$UTC_offset)) 
+0

顯示你現在如何做。 – aynber

+0

這就是應該發生的事情。 UTC + 3是utc時間的3小時,這意味着你減少了時間。例如下午3點在格林威治英格蘭意味着utc + 3時區(東美)是下午12點。 –

+0

但我所需的時區是亞洲/卡塔爾。 –

回答

0

正如評論者Marc B.指出的那樣,減去偏移量而不是增加偏移量。對於一個建議,看看在PHP手冊PHP: Date/Time Functions,並可能考慮設置一個默認時區(而不是手動修改)與date_default_time_zone_get和...設置。有很多潛在的追求途徑。

如果你想客戶當地的時間,一個簡單的方法是使用客戶端的javacript。查看SO問題How can I get the user's local time instead of the server's time?

+0

但我有來自許多國家的客戶。所以默認的時區設置爲UTC和基於客戶的UTC偏差從數據庫中取得,最後在客戶的發票上顯示客戶操作時間 –

2

您發佈的代碼分析字符串'15:00:00 +03:00

用簡單的英語,這個字符串的意思是「當地時間是15:00(下午3點),我位於GMT/UTC東部3小時的時區」。相應的UTC時間是12:00

恰巧你的PHP的默認時區設置爲UTC(我猜這是php.ini的默認值,你沒有改變它)。這就是爲什麼date()打印07 Sep, 2016 12:00 PM

對我來說,你的代碼打印07 Sep, 2016 03:00 PM,因爲我也在UTC+3的時區,我的php.ini使用它作爲默認值。

不要使用date()(或任何日期/時間函數)。其中一些人對時區不瞭解,其他人只在當地時間工作。

改爲使用DateTime類。他們可以處理時區,代碼更短,更清晰。

你的具體問題是很容易解決:

// Parse the input time in the UTC timezone 
$date = new DateTime("15:00:00", new DateTimeZone("UTC")); 
// Change the timezone to local 
$date->setTimeZone(new DateTimeZone("+03:00")); 
// Output the local time 
echo($date->format("d M, Y h:i A")); 

它顯示:

07 Sep, 2016 06:00 PM 

瞭解更多關於DateTimeDateTimeZoneDateTimeInterval和其他的DateTime類。它們是用PHP處理日期&時間的現代方式。

+0

謝謝你的回答axiac –