PHP抵消unix时间戳

时间:2012-08-30 05:40:18

标签: php datetime timezone unix-timestamp

我在PHP中有一个unix时间戳:

$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")

返回false。

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

3 个答案:

答案 0 :(得分:4)

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

$new_timestamp = strtotime("-7 hours", $timestamp);

答案 1 :(得分:1)

 $dt = new DateTime();
 $dt->setTimezone('GMT'); //Or whatever
 $dt->setTimestamp($timestamp);
 $dt->setTimezone('Pacific');
 //Echo out/do whatever
 $dt->setTimezone('GMT');

我非常喜欢DateTime课程。

答案 2 :(得分:1)

您可以使用DateInterval:

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