[英]how to make datetime class to work with DST and without DST in php?
我在使用DateTime类的地方编写了代码,该类还将dst以下国家/地区的时间转换为GMT格式。 但是我想要我需要DateTime类的功能应该在复选框选择上起作用。 当用户检查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');
................请帮助我.....如何使它工作....
试试这个代码,让我知道它有效吗?
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.