【问题标题】:converting a timestamp into multiple timezones [duplicate]将时间戳转换为多个时区[重复]
【发布时间】:2012-06-22 22:40:05
【问题描述】:

可能重复:
Timezone conversion in php

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

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

现在,我想把它转换成不同时区的时间戳

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

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

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

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

【问题讨论】:

  • 调用该函数有什么问题? :)
  • 正是我的观点。您应该考虑在问题本身中包含此信息,而不是在这里写它:)

标签: php datetime


【解决方案1】:

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

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 时间

【讨论】:

  • 这个需要像老方法一样输入偏移量。这意味着我必须为每个时区设置偏移量。当 php 为我们提供数据时,我想以某种方式使用它:)
  • @kritya 查看更新。我假设你的意思是你想做类似 create_date(123456789,'US/Eastern');
  • 你有什么数据?只有一个时间戳,而您希望在其他所有时区的其他 23 次都获得相同的时间戳?
  • 嗯。我有一个时间戳。我的脚本处于无限循环中,它监视日志文件中的更改。不同的用户有不同的时区,我会将其转换为用户想要的时区。现在有点清楚了吗?
【解决方案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 是欧洲/伦敦,因此您可能会得到略有不同的结果。

supported timezones here的列表。

【讨论】:

猜你喜欢
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
  • 2013-05-20
  • 2013-06-30
  • 2018-12-18
  • 2019-03-09
  • 1970-01-01
相关资源
最近更新 更多