У меня есть кусок кода
$data = array(
'fromTimezone' => 'IST',
'toTimezone' => 'Asia/Kolkata',
'dateTime' => '2020-04-19 16:23:00',
'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;
Как видите, я конвертирую часовой пояс из IST в Азию / Калькутту. По сути, Азия / Калькутта - это IST (индийское стандартное время) и, следовательно, они оба должны иметь одинаковое время. Но результат, который я получаю, - 2020-04-19 19:53:00
.
Что я делаю не так?
Редактировать: -
Кто-то может спросить меня, почему мне нужно преобразовать в IST в Азию / Калькутта. Фактически в приложении Laravel наш часовой пояс по умолчанию - Азия / Калькутта. Но в запросе mysql я получаю часовой пояс как «IST».
SELECT IF(@@session.time_zone = 'SYSTEM', @@system_time_zone, @@session.time_zone) AS mysql_timezone;
В пользовательской таблице часовой пояс пользователя сохраняется как «Азия / Калькутта», «Америка / Нью-Йорк» и др. c, отправляемое из мобильного приложения.
В моих таблицах есть поле с именем created_date
(не путать с created_at
), которое сохраняет текущую дату и время с помощью PHP. date('Y-m-d H:i:s')
процедура. Поэтому, когда я пытаюсь преобразовать это в часовой пояс пользователя, я преобразовываю его из IST в Азию / Калькутту.