- 服务器环境**
企业Linux
PHP语言5.3.5
- 问题**
假设我有一个UTC日期和时间,例如2011 - 04 - 27 02:45,我想将其转换为我的本地时间,即America/New_York。
- 三个问题:**
1.)我下面的代码可以解决这个问题,你同意吗?
<?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的值是否会根据夏令时(DST)自动调整?
3.)如果没有,我应该如何调整我的代码来自动调整DST?
谢谢你:-)
6条答案
按热度按时间yzuktlbb1#
这将使用PHP原生DateTime和DateTimeZone类完成您想要的任务:
有关详细信息,请参见DateTime::createFromFormat man page。
在time zones that do and do not currently have DST之间进行了一些实验之后,我发现这将考虑DST。使用我上面的方法进行相同的转换会呈现相同的结果时间。
p1iqtdky2#
我知道这是一个老职位,但有另一行你需要添加,以获得正确的时间。
在转换为本地时间之前,您需要将默认时区设置为UTC,如下所示(如果它是您提供的时间所在的时区):
jpfvwuh43#
在执行这个命令之后,$utc_ts包含本地时间,PHP自己处理DST。
=H=
svujldwt4#
我会改进哈辛·海德尔的回答
它应该输出
不同之处在于添加了源时区。strtetime()也接受时区!:p
bd1hkmkf5#
cigdeys36#
我不喜欢改变默认时区的答案。根据我在夏季时间变化的国家生活的经验,正确的方法是总是在UTC工作,然后在向用户显示时,改为本地时间。
这是我使用的一个,从一个时区到另一个时区(在本例中从UTC到欧洲/马德里)。
如果您需要日期之间的操作秒数,则使用$newDateTime-〉getTimestamp(),例如: