从UTC转换时区

时间:2014-07-21 21:37:36

标签: php

我无法将时区从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

0 个答案:

没有答案