是否有一种引用透明的方式与PHP中的时间一起工作

时间:2015-11-05 06:50:47

标签: php time timestamp-with-timezone

我正在尝试将时间转换为以下时区,无论代码运行的时间和位置如何:

  • 正在运行的代码的时区
  • AEST(澳大利亚东部标准时间)
  • EDT(纽约东部夏令时)

例如,给定一个unix时间戳,如何找到一个新的unix时间戳"同一周的星期一"使用EDT时区?我该如何做到这一点,以便它总能给出相同的结果?

1 个答案:

答案 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

获取支持的时区及其标识符列表