Php 通过使用夏令时将UTC转换为EST

Php 通过使用夏令时将UTC转换为EST,php,datetime,Php,Datetime,我想将UTC时间转换为EST,注意PHP中的夏令时。 这就是我目前所做的: $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(

我想将UTC时间转换为EST,注意PHP中的夏令时。 这就是我目前所做的:

$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,但由于夏令时的原因,它应该是东部标准时间上午7:00


有什么想法吗?

我认为这里有两个缺点。一是指定东部标准时间似乎意味着夏时制被忽略。另一个是你输入了2106,我想你的意思是2016年,夏令时不会在2106年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
类更容易阅读,这与


我使用了第二个示例,并将时间为1:01AM的日期从UTC转换为EDT(应该是9:01PM),但它显示为8:01PM,可能它不考虑夏令时?我得到9:01PM。php>$date=新日期时间('2016-03-15 01:01:00',新日期时区('UTC');php>$date->setTimezone(newdatetimezone(“美国/纽约”);php>echo$date->format('Y-m-dh:i:s');2016-03-14 21:01:00是的,这是有效的,我大量这样做并误读了数据,谢谢你的确认。
$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');