将UTC转换为EST并考虑夏令时。

4

我想在PHP中将UTC时间转换为EST,并考虑夏令时的影响。

目前我已经完成以下步骤:

$from='UTC';
$to='EST';
$format='Y-m-d H:i:s';
$date=date('2106-03-15 23:00:00');// UTC time
date_default_timezone_set($from);
$newDatetime = strtotime($date);
date_default_timezone_set($to);
$newDatetime = date($format, $newDatetime);
date_default_timezone_set('UTC');
echo $newDatetime ;//EST time

返回的是上午6:00 EST,但由于夏令时的影响,应该是上午7:00 EST

有什么想法吗?

1个回答

16

我认为这里有两个问题。一个是指定东部标准时间似乎意味着忽略了夏令时。另一个是您输入的是2106年,我想您的意思是2016年,在3月15日不会开始夏令时。以下代码似乎可以解决问题:

$from='UTC';
$to='America/New_York';
$format='Y-m-d H:i:s';
$date=date('2016-03-15 23:00:00');// UTC time
date_default_timezone_set($from);
$newDatetime = strtotime($date);
date_default_timezone_set($to);
$newDatetime = date($format, $newDatetime);
date_default_timezone_set('UTC');
echo $newDatetime ;//EST time

另一方面,使用 DateTime 类更容易阅读,这与DateTime::setTimeZone()文档中的第一个示例非常相似。

$date = new DateTime('2016-03-15 23:00:00', new DateTimeZone('UTC'));
$date->setTimezone(new DateTimeZone('America/New_York'));
echo $date->format('Y-m-d H:i:s');

我使用了第二个示例,将一个带有时间的UTC日期(1:01AM)转换为EDT(应该是晚上9:01),但它显示的是晚上8:01,可能没有考虑夏令时? - Aadesh Dhakal
1
我得到了晚上9点01分。 php > $date = new DateTime('2016-03-15 01:01:00', new DateTimeZone('UTC')); php > $date->setTimezone(new DateTimeZone('America/New_York')); php > echo $date->format('Y-m-d H:i:s'); 2016-03-14 21:01:00 - Matt Raines
没错,这个可以用,我当时在批量处理的时候看错了数据,谢谢你确认一下。 - Aadesh Dhakal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接