我需要计算两个时区之间的小时差,但是当领先的时区跨越到下一天时,我遇到了一些问题。
例如:
//Let's say it is 11pm 23:00 in LA
$local_tz = new DateTimeZone('America/Los_Angeles');
$local = new DateTime('now', $local_tz);
$local_hour = $local->format('H');
//NY is 3 hours ahead, so it is 2am, 02:00
$user_tz = new DateTimeZone('America/New_York');
$user = new DateTime('now', $user_tz);
$user_hour = $user->format('H');
跟随这个问题的示例(在不同时区计算日期之间的小时数),我得到了一个错误的结果:
$diff = $user_tz->getOffset($local);
error_log('$diff '.gmdate("H:i:s", $diff)); //outputs 20:00:00
如果现在是洛杉矶时间下午4点,那么在纽约就是晚上7点,很容易明白。
$time_diff = ($user_h - $local_h); //$time_diff = 3;
但当纽约进入下一天时,我又会得到错误的结果:
$time_diff = ($user_h - $local_h); //$time_diff = -21;
那么,如何考虑另一个已经进入新一天的时区?