在另一个时区接收时间戳

时间:2013-11-08 18:34:41

标签: php datetime

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

$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;

返回初始timeStamp而不是新的,我做错了什么? :\

2 个答案:

答案 0 :(得分:1)

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

来自Wikipedia

  

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

答案 1 :(得分:-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