关于php:将时间戳转换为多个时区

converting a timestamp into multiple timezones

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Timezone conversion in php

这是我想要做的一个简单的例子。

我有一个包含时间戳的变量$time

现在,我想将其转换为不同时区的时间戳

有没有办法在不使用函数date_default_timezone_set()的情况下多次执行此操作?

我知道我的观点可能看起来令人困惑并且指向较少,所以请在评论中澄清任何疑问。

例如,如果我有100个电话要改变它: -

  • 它会影响我的其他功能
  • 函数名称表示其默认值
  • 它会减慢脚本速度。

  • 您可以使用DateTime对象并使用SetTimezone()方法根据需要设置时区。

    例如,以下代码: -

    1
    2
    3
    4
    5
    6
    7
    $datetime = new DateTime();
    var_dump($datetime->getTimezone()->getName());
    var_dump($datetime->format(DateTime::ISO8601));
    $datetime->setTimezone(new DateTimeZone('UTC'));
    var_dump($datetime->format(DateTime::ISO8601));
    $datetime->setTimezone(new DateTimeZone('America/New_York'));
    var_dump($datetime->format(DateTime::ISO8601));

    给我以下输出: -

    1
    2
    3
    4
    string 'Europe/London' (length=13)
    string '2012-06-20T20:33:29+0100' (length=24)
    string '2012-06-20T19:33:29+0000' (length=24)
    string '2012-06-20T15:33:29-0400' (length=24)

    我的开发服务器默认TZ是欧洲/伦敦,因此您可能会得到略有不同的结果。

    这里有一个支持的时区列表。


    为了给你一个我为在不同时区创建日期而做的事情的样本。这就是我所做的

    1
    2
    3
    4
    function create_date($format, $time, $offset = -6)
    {  
        return gmdate($format, $time + (3600 * $offset));
    }

    如果你想以时间戳格式保留它,只需将其修改为如下所示。

    1
    2
    3
    4
    function create_date($time, $offset = -6)
    {  
        return $time + (3600 * $offset);
    }

    更新:

    如果您需要以文本形式输入时区,我将使用PHP时区列表问题中的列表,然后在函数中对该数组执行简单查找以获取偏移量以使其工作。

    注意:

    为了使其正常工作,原始时间必须是GMT时间