Преобразование UTC в CST в php - PullRequest
0 голосов
/ 29 мая 2018

Я хочу преобразовать время UTC в CST, используя PHP.После поиска в Google я получил функцию

function date_convert($dt, $tz1, $df1, $tz2, $df2) {
  // create DateTime object
  $d = DateTime::createFromFormat($df1, $dt, new DateTimeZone($tz1));
  // convert timezone
  $d->setTimeZone(new DateTimeZone($tz2));
  // convert dateformat
  return $d->format($df2);
}

echo date_convert('2018-05-29 11:44:00', 'UTC', 'Y-m-d H:i:s', 'CST', 'Y-m-d H:i:s');

Вывод

2018-05-29 05: 44: 00

Но когда я попробовалпреобразовав 2018-05-29 11: 44: 00 в UTC, используя онлайн-конвертер , я получил результат как 05/29/2018 6:44 AM ,что на 1 час больше, чем возвращает функция.

Может кто-нибудь помочь мне найти правильный вывод?Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Попробуйте;

function date_convert($time, $oldTZ, $newTZ, $format) {
    // create old time
    $d = new \DateTime($time, new \DateTimeZone($oldTZ));
    // convert to new tz
    $d->setTimezone(new \DateTimeZone($newTZ));

    // output with new format
    return $d->format($format);
}
echo date_convert('2018-05-29 11:44:00', 'UTC', 'CST', 'Y-m-d H:i:s');

Вывод:

2018-05-29 05:44:00

CST - UTC-06, php работает хорошо

0 голосов
/ 29 мая 2018

Я не могу это объяснить, но, похоже, это происходит только с EST / CST, даже если изменить его на D.

$n = new DateTime();  // 'date' => '2018-05-29 09:45:01.000000' America/New_York
$n->setTimeZone(new DateTimeZone('UTC')); // 'date' => '2018-05-29 13:45:01.000000'
$n->setTimeZone(new DateTimeZone('EDT')); // 'date' => '2018-05-29 08:45:01.000000'

Но если вы используете место вместо часового пояса, онохорошо работает:

$n->setTimeZone(new DateTimeZone('America/New_York'));  // 'date' => '2018-05-29 09:45:37.000000'
$n->setTimeZone(new DateTimeZone('America/Chicago'));  // 'date' => '2018-05-29 08:45:37.000000'

Я бы предложил вместо этого использовать такое место, как America/Chicago.

...