首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP UTC到本地时间

PHP UTC到本地时间
EN

Stack Overflow用户
提问于 2011-04-27 23:23:03
回答 5查看 47.2K关注 0票数 29

服务器环境

Redhat Enterprise Linux

PHP 5.3.5

Problem

假设我有一个UTC日期和时间,例如2011-04-27 02:45,我想将其转换为我的本地时间,即America/New_York。

三个问题:

1.)我下面的代码可能会解决这个问题,你同意吗?

代码语言:javascript
复制
<?php

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的值是否会根据夏令时自动调整?

3.)如果不是,我应该如何调整代码以自动调整以适应DST?

谢谢:-)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-04-27 23:48:21

这将使用PHP原生DateTimeDateTimeZone类执行您想要的操作:

代码语言:javascript
复制
$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 man page

time zones that do and do not currently have DST之间进行了一些实验之后,我发现这将会考虑到DST。使用我上面的方法进行相同的转换会呈现相同的结果时间。

票数 43
EN

Stack Overflow用户

发布于 2014-07-29 00:20:57

我知道这是一个古老的帖子,但是你需要添加另一行来获得正确的时间。

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

代码语言:javascript
复制
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");
}
票数 5
EN

Stack Overflow用户

发布于 2011-04-27 23:43:22

代码语言:javascript
复制
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=

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5806526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档