【问题标题】:PHP Offsetting unix timestampPHP 偏移 unix 时间戳
【发布时间】:2012-08-24 19:20:09
【问题描述】:

我在 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

【问题讨论】:

    标签: php datetime timezone unix-timestamp


    【解决方案1】:

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

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

    【讨论】:

    • 您确定strtotime("-07:00", 1346300336) 有效吗?我要找回原来的1346300336
    • @Justin 哦,它返回1346357936
    • 我在尝试strtotime("-07:00", 1346300336) 时得到了相同的结果1346300336
    • @Justin 应该是这样的strtotime("-7 hours", 1346300336)。你错过了小时这个词
    【解决方案2】:
     $dt = new DateTime();
     $dt->setTimezone('GMT'); //Or whatever
     $dt->setTimestamp($timestamp);
     $dt->setTimezone('Pacific');
     //Echo out/do whatever
     $dt->setTimezone('GMT');
    

    我非常喜欢DateTime 课程。

    【讨论】:

    • 我没有存储GMTPacific格式的时区,我存储了偏移量,如上图。
    • 可能不太理想,但您可以创建一个数组来将时区映射到偏移量
    【解决方案3】:

    您可以使用 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');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      • 2017-04-27
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      相关资源
      最近更新 更多