我想使用PHP将UTC时间转换为CST。谷歌搜索后,我得到了一个功能
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
但是当我尝试使用online converter将 2018-05-29 11:44:00 转换为UTC时,我的结果为 05/29/2018 6:44 AM ,比函数返回的时间长1小时。
有人能帮我找到正确的输出吗?提前谢谢。
答案 0 :(得分:1)
我无法解释它,但它似乎只发生在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
这样的地方。
答案 1 :(得分:0)
试试这个;
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效果很好