Преобразование часового пояса дает еще один час в PHP - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть следующий скрипт:

$data = array(
  'fromTimezone'          => 'Asia/Kolkata',
  'toTimezone'            => 'America/New_York',
  'dateTime'              => '2020-02-06 08:34:11',
  'dateTimeFormat'        => 'Y-m-d H:i:s'
);

$fromTimezone           = $data['fromTimezone'];
$toTimezone             = $data['toTimezone'];
$dateTime               = $data['dateTime'];
$dateTimeFormat         = $data['dateTimeFormat'];


$fromZoneDateTime    = new DateTime($dateTime, new DateTimeZone($fromTimezone));

// synchronizing with the to-Timezone
$fromZoneDateTime->setTimezone(new DateTimeZone($toTimezone));

$returnDateTime    = date($dateTimeFormat, strtotime($fromZoneDateTime->format('Y-m-d H:i:s')));
echo $returnDateTime;

Это дает мне 2020-02-05 22:04:11

Но когда я проверяю время в приложении реального времени для преобразования часового пояса. как Преобразователь часового пояса , я получаю данные как 2020-02-05 23:04:11.

enter image description here

Почему это несоответствие? Как я могу преодолеть это?

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Сайт, на который вы ссылались, показывает разницу между вашим часовым поясом (предположительно Индией) и временем в Нью-Йорке для текущей даты .

Есть и другие сайты, которые вы можно использовать для проверки ваших предположений, например timeanddate.com, , который показывает правильные результаты для рассматриваемой даты , которые соответствуют выводу вашего кода.

screenshot

Что касается , почему , следует понимать, что хотя в Индии установлен UTC + 05:30 (IST), Нью-Йорк чередуется между UT C -05: 00 (EST) и UT C -04: 00 (EDT). Подробнее об этом читайте тэг часового пояса wiki , особенно раздел «Часовой пояс! = Смещение». Вы также можете просмотреть тэг DST вики .

0 голосов
/ 21 апреля 2020

Я думаю, что это из-за экономии дневного света.

Пожалуйста, обратитесь PHP Обнаружение перехода на летнее время

...