このコードを試してみて、うまくいくか教えてください。
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はブール値であるため、DST が必要な場合は true を渡します (または、このパラメーターをスキップします。デフォルト)、そうでない場合は false を渡します。
時間を 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を期待します...ベオグラードで12:52の場合、ニューヨークでは06: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 ... わかりません! コードで何をしているのか教えてください。
出力:
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)