繁体   English   中英

如何使datetime类与DST和PHP中没有DST一起使用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM