2011-03-29 32 views
1

我已經寫了代碼,我使用的DateTime類也將dst後國家時間轉換爲GMT格式。 但我想要的功能,我需要的DateTime類應複選框選擇工作。 當用戶檢查dst時,只有該功能應該工作。 這裏我的代碼去........如何讓datetime類與DST一起使用,而不需要在PHP中使用DST?

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 16:07:00.000'; 

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

................ 請幫我.....如何使這工作.......

回答

0

試試這個代碼,讓我知道它的工作?

function ConvertOneTimezoneToAnotherTimezone($time,$currentTimezone,$timezoneRequired,$considerDST=true) { 
    // save current timezone 
    $backup_tz = date_default_timezone_get(); 
    date_default_timezone_set($currentTimezone); 
    $t = strtotime($time); 
    date_default_timezone_set($timezoneRequired); 
    if (!$considerDST && (date('I', $t) == 1)) { 
    if ($timezoneRequired == 'Australia/Lord_Howe') $dst='-30 minutes'; 
    else $dst = "-1 hour"; 
    $t = strtotime($dst, $t); 
    } 
    // restore old timezone 
    $res = date('Y-m-d H:i:s', $t); 
    date_default_timezone_set($backup_tz); 
    return $res; 
    } 

$mytime = '2011-03-29 12:40:00.000'; 
$myzone = 'UTC'; 

echo ConvertOneTimezoneToAnotherTimezone($mytime, $myzone, 'Australia/Adelaide', true) . " (Adelaide DST=Yes)<br>"; 
echo ConvertOneTimezoneToAnotherTimezone($mytime, $myzone, 'Australia/Adelaide', false) . " (Adelaide DST=No)"; 

其他參數$ considerDST是布爾那麼傳遞true(或跳過此參數,其默認),如果你想DST或假,如果你不這樣做。

如果您想將時間轉換爲UTC,則需要傳入與該函數的輸入參數相同的時間。

你不能這樣做!

$mytime = '2011-03-30 12:52:00.000'; 
$myzone = 'Europe/Belgrade'; 
... 
$mytime = '2011-03-30 12:52:00.000'; 
$myzone = 'America/New_York'; 

,並期望同UTC,因爲它鼻涕同一時間......當它在貝爾格萊德,其在紐約06:52 12:52,所以......

2011-03-20 12:52:00.000 [Europe/Belgrade] 
2011-03-30 06:52:00.000 [America/NewYork] 
2011-03-30 16:22:00.000 [Asia/Calcutta] or [Asia/Kolkata] 
2011-03-30 19:52:00.000 [Asia/Pyongyang] 
etc... 

具有相同的UTC時間2011-03-20 10:52:00.000

從我的代碼...

$mytime = '2011-03-30 21:00:00.000'; 
$myzone = 'Australia/Melbourne'; 

echo ConvertOneTimezoneToAnotherTimezone($mytime, $myzone, 'UTC', true) . " (Melbourne->UTC DST=Yes)<br>"; 
echo ConvertOneTimezoneToAnotherTimezone($mytime, $myzone, 'UTC', false) . " (Melbourne->UTC DST=No)<br><br>"; 


$mytime = '2011-03-30 15:30:00.000'; 
$myzone = 'Asia/Kolkata'; 

echo ConvertOneTimezoneToAnotherTimezone($mytime, $myzone, 'UTC', true) . " (India->UTC DST=Yes)<br>"; 
echo ConvertOneTimezoneToAnotherTimezone($mytime, $myzone, 'UTC', false) . " (India->UTC DST=No)<br>"; 

那就是UTC 10:00 ......我不明白!告訴我你的代碼又在做什麼?

OUTPUT:

2011-03-30 10:00:00 (Melbourne->UTC DST=Yes) 
2011-03-30 10:00:00 (Melbourne->UTC DST=No) 

2011-03-30 10:00:00 (India->UTC DST=Yes) 
2011-03-30 10:00:00 (India->UTC DST=No) 
+0

請不要有 「對話」 通過發佈大量 「答案」 的。改用編輯鏈接來改善你的回答。 – 2011-03-31 06:26:04