我无法将时区从UTC转换为用户选择的时区。问题似乎是夏令时。
这是我刚刚编写的一个例子。
<?php
date_default_timezone_set("UTC");
$timezone = -5.0;
$timestamp = time();
$local_time = $timezone * 3600 + $timestamp;
echo date( "m/d/Y - h:i A", $local_time );
?>
当我运行测试文件时,它返回07/21/2014 - 04:29 PM
。当前时间实际上是5:29。问题是夏令时,我们的时钟被转回一小时。
如何解决此问题,还是有更有效的方法来调整时间戳?
我看到的最简单的解决方案是让用户选择DST当前是否在他们居住的地方生效,因为并非每个国家/时区都使用DST。如果它有效,那么只需将$timezone
变量修改为+1即可,但需要每个用户管理DST是否生效。
提前谢谢你。
修改
我尝试使用DateTime但它仍然关闭......
<?php
$timestamp = time();
echo 'Unix timestamp: ' . $timestamp . "<br/>";
echo 'Unix date: ' . date( "m/d/Y - h:i A", $timestamp ) . "<br/><br/>";
$dt = date_create_from_format('U', $timestamp);
date_timezone_set($dt, new DateTimeZone('America/New_York'));
$adjusted_timestamp = date_format($dt, 'U') + date_offset_get($dt);
echo 'America/New_York: ' . $adjusted_timestamp . "<br/>";
echo 'America/New_York: ' . date( "m/d/Y - h:i A", $adjusted_timestamp );
?>
结果偏差+2小时。返回时间是下午7:47,现在是下午5:47。
Unix timestamp: 1405979278
Unix date: 07/21/2014 - 11:47 PM
America/New_York: 1405964878
America/New_York: 07/21/2014 - 07:47 PM