3

我有一个unix时间戳PHP

$timestamp = 1346300336;

然后我有一个我想要应用的时区的偏移量。基本上,我想应用偏移量并返回一个新的 unix 时间戳。偏移量遵循这种格式,不幸的是,由于与其他代码的兼容性,无法更改:

$offset_example_1 = "-07:00";
$offset_example_2 = "+00:00";
$offset_example_3 = "+07:00";

我试过了:

$new_timestamp = strtotime($timestamp . " " . $offset_example_1);

但不幸的是,这不起作用:(。还有其他想法吗?

编辑

经过测试,我非常惊讶,但即使这样也行不通:

strtotime("1346300336 -7 hours")

返回假。

让我们稍微改变一下,将上面的偏移示例转换为秒的最佳方法是什么?然后我可以简单地做$timestamp + $timezone_offset_seconds

4

3 回答 3

6

您应该将原始时间戳作为第二个参数传递给strtotime.

$new_timestamp = strtotime("-7 hours", $timestamp);
于 2012-08-30T06:08:12.070 回答
1
 $dt = new DateTime();
 $dt->setTimezone('GMT'); //Or whatever
 $dt->setTimestamp($timestamp);
 $dt->setTimezone('Pacific');
 //Echo out/do whatever
 $dt->setTimezone('GMT');

我非常喜欢DateTime类。

于 2012-08-30T05:45:31.837 回答
1

您可以使用日期间隔:

$t = 1346300336;
$date = DateTime::createFromFormat('Y-m-d', date('Y-m-d', $t));
$interval = DateInterval::createFromDateString('-7 hours'); 
$date->add($interval);

echo $date->getTimestamp();
echo $date->format('Y-m-d H:i:s');
于 2012-08-30T06:13:04.280 回答