PHP:时区数据是否以某种方式嵌入到时间戳中?

时间:2011-01-22 07:04:28

标签: php datetime timezone

date_default_timezone_set("Asia/Singapore"); // UTC +8
$dt = new DateTime();
$dt->setTimestamp(DateTime::createFromFormat('u', gmdate('u'))->getTimestamp());
echo $dt->getTimezone()->getName(); // Asia/Singapore
echo $dt->format('d M Y H:i:s'); // Correct local time

$dt->setTimezone(new DateTimeZone('UTC'));
echo $dt->format('d M Y H:i:s'); // Correct UTC Time
die;

我想知道时间戳是否包含时区数据。在第3行,您看到我使用gmdate(),它应该给我UTC / GMT时间。但是当我得到时区&格式化日期时间,它们在本地时间。我没有在我的DateTime对象中设置时区,给它一个UTC时间戳。它以某种方式知道转换为本地时间。这让我想知道Timezone数据是否包含在时间戳中

2 个答案:

答案 0 :(得分:3)

setTimestamp接受GMT 0中的时间戳,并且由于GMT而在gmdate('u')中传递了该时间戳。 DateTime对象默认采用您当前的时区。

之后 - 您已正确设置时间戳和当前时区,这就是DateTime对象格式化新加坡日期的原因。

  

这让我想知道Timezone数据是否包含在时间戳中

没有。时间戳只存储自unix-epoch以来的秒数。

答案 1 :(得分:1)

时间戳根据解释器时区进行解释。

所以不,它们是标准的,并且本身不包含时区数据。

您的示例证明了这一点,因为您更改了时区,结果也是如此。

如果嵌入了时区数据,结果不会改变。