0

可能重复:
php中的时区转换

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

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

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

有没有办法在不date_default_timezone_set()多次使用该功能的情况下做到这一点?

我知道我的观点可能看起来令人困惑且意义不大,因此请在评论中澄清任何疑问。

例如,如果我有 100 次调用来更改它:-

  1. 它影响我的其他功能
  2. 函数名称暗示其默认值
  3. 它减慢了脚本的速度。
4

2 回答 2

2

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

例如,以下代码:-

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

给了我以下输出:-

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 是欧洲/伦敦,因此您可能会得到略有不同的结果。

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

于 2012-06-20T18:16:20.047 回答
0

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

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

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

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

更新:

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

注意:

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

于 2012-06-20T18:13:46.853 回答