我的代码适用于将任何时区转换为GMT / UTC,反之亦然。 但我想要的功能是它还应该检查那些不遵循DST的时区,还应该包括日期/时间可以是任何格式的功能。
表示如果只输入日期,它应该给我正确的结果。 例如:
如果我只输入'2011-03-31'或任何格式的日期,它应该给我正确的结果。 这是我的代码。
function ConvertOneTimezoneToAnotherTimezone($time,$currentTimezone,$timezoneRequired,$requried_DST=true) {
date_default_timezone_set($currentTimezone);
$current_time = strtotime($time);
date_default_timezone_set($timezoneRequired);
if (!$requried_DST && (date('I', $current_time) == 1))
{
if ($timezoneRequired == 'Australia/Lord_Howe')
$dst='-30 minutes';
else $dst = "-1 hour";
$current_time = strtotime($dst, $current_time);
}
// restore old timezone
$res = date('Y-m-d H:i:s', $current_time);
return $res;
}
请有人帮助我。
这是一个例子...... 我的意见是........
$mytime = '2011-03-31 2:35:00.000';
$myzone = 'America/New_York';
echo "(New_York->UTC DST=Yes)".ConvertOneTimezoneToAnotherTimezone($mytime, $myzone, 'UTC', true) ."<br>";
echo "(New_York->UTC DST=No)".ConvertOneTimezoneToAnotherTimezone($mytime, $myzone, 'UTC', false) . " <br><br>";
///////////////////////
$mytime = '2011-03-31 6:35:00.000';
$myzone = 'UTC';
echo "(UTC->New_York DST=Yes)".ConvertOneTimezoneToAnotherTimezone($mytime, $myzone, 'America/New_York', true) ."<br>";
echo "(UTC->New_York DST=No)".ConvertOneTimezoneToAnotherTimezone($mytime, $myzone, 'America/New_York', false) . " <br><br>";
和 结果是:
(New_York->UTC DST=Yes)2011-03-31 06:35:00
(New_York->UTC DST=No)2011-03-31 06:35:00
(UTC->New_York DST=Yes)2011-03-31 02:35:00
(UTC->New_York DST=No)2011-03-31 01:35:00
............此处输入的日期可以是任何格式...........
答案 0 :(得分:1)
最简单的方法应该是(虽然我不明白你的$requried_DST
开关)
function ConvertOneTimezoneToAnotherTimezone($time, $currentTimezone, $timezoneRequired) {
$dt = new DateTime($time, new DateTimeZone($currentTimezone));
$dt->setTimezone(new DateTimeZone($timezoneRequired));
return $dt->format('Y-m-d H:i:s');
}
示例:
echo ConvertOneTimezoneToAnotherTimezone('2011-03-31 12:00', 'Europe/Berlin', 'UTC');
// 2011-03-31 10:00:00 that's two hours difference because of DST
echo ConvertOneTimezoneToAnotherTimezone('2011-03-12 12:00', 'Europe/Berlin', 'UTC');
// 2011-03-12 11:00:00 that was before DST transition last weekend