通过注意夏令时将 UTC 转换为 EST


Convert UTC to EST by taking care of daylight saving

我想通过在 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 AM EST,但由于夏令时应该7:00AM EST

知道吗?

我认为这里有两个错误。一是指定东部标准时间似乎意味着忽略夏令时。另一个是你输入了 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 类更容易阅读,这与文档中的第一个示例非常相似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');