0

可能你知道为什么这不起作用(试图在另一个时区接收时间戳):

$from_zone = 'Europe/Kiev';
$to_zone = 'US/Eastern';
$stamp = 1383897599;

$from_tz = new DateTimeZone($from_zone);
$to_tz = new DateTimeZone($to_zone);

$dateTime = new DateTime(null, $from_tz);
$dateTime->setTimestamp($stamp);

$dateTime->setTimeZone($to_tz);

$new_stamp = $dateTime->getTimestamp();
echo $new_stamp;

返回初始时间戳而不是新时间戳,我做错了什么?:\

4

2 回答 2

1

UNIX 时间戳的定义基于 UTC。无论时区如何,时间戳都将始终返回相同的日期/时间。

来自维基百科

Unix 时间或 POSIX 时间是用于描述时间瞬间的系统,定义为自1970 年 1 月 1 日星期四的协调世界时 (UTC) 午夜以来经过的秒数

于 2013-11-08T18:45:30.180 回答
-1

时间戳是自 1970 年 1 月 1 日 00:00:00 UTC 以来经过的秒数。更改时区不会影响该值,并且time()函数会独立于设置的时区返回相同的值。

如果您需要不同的时间戳,请尝试使用strtotime($dateString),因为它受时区影响,如下所示:

date_default_timezone_set('Europe/Kiev');
$date = date('Y-m-d H:i:s');
echo $date . ' - ' . strtotime($date) . '<br />';
date_default_timezone_set('US/Eastern');
echo $date . ' - ' . strtotime($date) . '<br />';

打印:

2013-11-08 20:48:47 - 1383936527
2013-11-08 20:48:47 - 1383961727
于 2013-11-08T18:49:07.413 回答