проверка часовых поясов, которые не следуют за DST? - PullRequest
0 голосов
/ 31 марта 2011

Мой код отлично работает для преобразования любого часового пояса в GMT / UTC и наоборот.Но я хочу функциональность, в которой он должен также проверять те часовые пояса, которые не следуют за летним временем, а также должен включать функциональность, где дата / время могут быть в любом формате.мне правильный результат.Например:

Если я ввел просто «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

............ здесь введенная дата может быть в любом формате ...........

1 Ответ

1 голос
/ 31 марта 2011

Самый простой способ сделать это должен быть (хотя я не понимаю ваш $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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...