2011-03-29 34 views
0

我寫了一個腳本,它將我的時區轉換爲gmt,反之亦然完美.......但是當我試圖檢查DST後,timzones相同的函數我得到錯誤的結果。 這裏是我的功能去............轉換時間到UTC時錯誤的結果

function ConvertOneTimezoneToAnotherTimezone($time,$currentTimezone,$timezoneRequired) 
{ 

$current_zone = new DateTimeZone($currentTimezone); 
// print_r($current_zone); 
//$gmt = new DateTimeZone('GMT'); 

$date = new DateTime($time, $current_zone); 
//var_dump($date); 
//$date->setTimezone($gmt); 
$date->setTimezone(new DateTimeZone($timezoneRequired)); 

return $date->format('Y-m-d H:i:s'); 

// Convert it back to Original timezone 
//$date->setTimezone($current_zone); 
//return $date->format('Y-m-d H:i:s'); 
} 

$time='2011-03-29 9:53:00'; 

echo "Current Date/Time is = ". 
     ConvertOneTimezoneToAnotherTimezone($time,'Asia/Kolkata','UTC'); 

此功能工作正常的「亞洲/加爾各答」但是當我嘗試與美國/紐約時區。我得到錯誤的結果....... 請檢查代碼,並幫助我解決錯誤。

+0

你爲什麼要污衊你的問題? – Will 2011-03-29 16:53:12

回答

2

結果是「當前日期/時間= 2011-03-29 13:23:00」與「America/New_York時區」,它似乎是正確的。

你可能會覺得奇怪的是,紐約是GMT-5,它應該是「2011-03-29 14:23:00」。

但是,夏令時(夏令時)從2011/3/13開始,將於2011年11月6日結束。 因此,在DST期間,它將與GMT-4相同。

入住紐約時間與DST: http://www.timeanddate.com/worldclock/city.html?n=179

0

我想這個問題(和代碼)可以用this one有關。所以你的解決方案在那裏。順便說一句,你發現從不同的時區將時間轉換爲UTC有什麼不對嗎?因此,您不需要使用函數的最後一個參數(boolean true/false),因爲UTC不會遵守夏令時,所以基本上您會得到與函數結果相同的時間,在函數中包含或不包含DST。