我正在尝试将时间转换为以下时区,无论代码运行的时间和位置如何:
例如,给定一个unix时间戳,如何找到一个新的unix时间戳"同一周的星期一"使用EDT时区?我该如何做到这一点,以便它总能给出相同的结果?
答案 0 :(得分:46)
首先,您必须了解Unix时间戳与时区无关,它始终与UTC / GMT相关。引用手册
返回自Unix Epoch(1970年1月1日00:00:00 GMT)以来的秒数测量的当前时间。
现在您知道一个时间戳表示参考GMT / UTC的固定时间,您可以继续更改代码中的时区,以便从相同的时间戳计算它们的时间。
我们假设你有一个unix时间戳
$ts = 1171502725;
如果您从中创建日期,则可以执行类似
的操作$date = new DateTime("@$ts");
echo $date->format('U = Y-m-d H:i:s T') . "\n";
现在你想看看在EST中对应的是什么,你可以做到
$date->setTimezone(new DateTimeZone('America/New_York'));
echo $date->format('U = Y-m-d H:i:s T') . "\n";
同样适用于CST
$date->setTimezone(new DateTimeZone('America/Chicago'));
echo $date->format('U = Y-m-d H:i:s T') . "\n";
等等:)
<强>输出强>
1171502725 = 2007-02-15 01:25:25 GMT+0000
1171502725 = 2007-02-14 20:25:25 EST
1171502725 = 2007-02-14 19:25:25 CST
<强> Fiddle 强>
您可以从 PHP Manual
获取支持的时区及其标识符列表