我在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
。
答案 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');