php 当地时间,PHP UTC到当地时间

服务器环境

Redhat Enterprise Linux

PHP 5.3.5

问题

假设我有一个UTC日期和时间,例如2011-04-27 02:45,我想

将它转换为我当地时间,即America / New_York。

三个问题:

1.)我的代码可以解决问题,你同意吗?

date_default_timezone_set('America/New_York');  // Set timezone.

$utc_ts = strtotime("2011-04-27 02:45");  // UTC Unix timestamp.

// Timezone offset in seconds. The offset for timezones west of UTC is always negative,

// and for those east of UTC is always positive.

$offset = date("Z");

$local_ts = $utc_ts + $offset;  // Local Unix timestamp. Add because $offset is negative.

$local_time = date("Y-m-d g:i A", $local_ts);  // Local time as yyyy-mm-dd h:m am/pm.

echo $local_time;  // 2011-04-26 10:45 PM

?>

2.)但是,$ offset的值是否会自动调整为夏令时(DST)?

3.)如果没有,我应该如何调整我的代码以自动调整夏令时?

谢谢:-)

你试过吗?

date("Z")始终返回时区GMT +0000,它没有DST的更正。

这将使用PHP本机DateTime和DateTimeZone类执行您想要的操作:

$utc_date = DateTime::createFromFormat(

'Y-m-d G:i',

'2011-04-27 02:45',

new DateTimeZone('UTC')

);

$nyc_date = $utc_date;

$nyc_date->setTimeZone(new DateTimeZone('America/New_York'));

echo $nyc_date->format('Y-m-d g:i A'); // output: 2011-04-26 10:45 PM

有关更多信息,请参见DateTime :: createFromFormat手册页。

在经历过和当前没有DST的时区之间进行一些实验后,我发现这将考虑DST。使用上述方法进行的相同转换会产生相同的结果时间。

这也是为什么PHP为印第安纳州提供了7个不同的时区,以解释他们疯狂的不同DST规则:php.net/manual/en/timezones.php

全部:我非常感谢大家的帮助。 Treffynnon:谢谢!我会试试看。与你的相比,我的代码看起来很原始,哈哈。在我的尝试中,我是否接近了?再次感谢!

@John很高兴你喜欢它。我不确定你的代码,因为我从来没有用过程式的PHP风格编写代码。

@Treffynnon引用星球大战:这是一个较旧的代码,但检查出来。

我知道这是一个旧帖子,但是还需要添加另一行来获取正确的时间。

在转换为本地时间之前,您需要将默认时区设置为UTC(如果它是您提供时间的时区):

function GmtTimeToLocalTime($time) {

date_default_timezone_set('UTC');

$new_date = new DateTime($time);

$new_date->setTimeZone(new DateTimeZone('America/New_York'));

return $new_date->format("Y-m-d h:i:s");

}

我会改进Has??in Hayder的答案

date_default_timezone_set('America/New_York');  // Set timezone.

$utc_ts = strtotime("2011-04-27 02:45 UTC");  // UTC Unix timestamp.

echo date('Y-m-d H:i:s a T', $utc_ts);

它应该输出

2011-04-26 10:45:00 pm EDT

不同之处在于添加源时区。 strtotime()也接受你知道的时区! :p

date_default_timezone_set('America/New_York');  // Set timezone.

$utc_ts = strtotime("2011-04-27 02:45");  // UTC Unix timestamp.

执行此操作后,$ utc_ts包含本地时间。 PHP处理DST本身。

= H =

这不会转换时区之间的时间。它只为2011-04-27 02:45创建一个新的unix时间戳。在这种情况下,示例中的时区不执行任何操作,并且无关紧要。

没有像UTC时间戳这样的东西,因为时间戳不受时区的影响。您可以在第一行设置任何时区,$ utc_ts将返回相同的值。此代码除了设置时区以供将来在脚本中使用之外什么都不做,它不会影响时间戳本身。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值