俄亥俄州哥伦布市在EDT时区,但PHP :: DateTime使用这些php timezones,我似乎无法找到一个给我正确时间的。 America / New_York已经过了一个小时,因为在美国东部时间结束之前我们是+5而不是4。
我很困惑。例如现在它上午11:26粗略地说,我回到10:26 AM。服务器上设置了正确的时间,我尝试使用date_default_timezone_set(“EDT”),但这是不允许的。
$fromZone = 'Europe/London';
$toZone = 'American/New_York';
function adjustTime($time, $fromZone, $toZone){
$date = new DateTime($time, new DateTimeZone($fromZone));
$date->setTimezone(new DateTimeZone($toZone));
return $date->format('Y-m-d H:i:s');
}
例如:我从肥皂网服务“2010-09-23 15:25:56”收到这是欧洲/伦敦时间,它应该转变为“2010-09-23 11:25:56”是美国东部时间。我试图使用上面的功能,这将返回“2010-09-23 10:25:56”
答案 0 :(得分:1)
“America / New_York”应该给你正确的价值,因为在撰写本文时它也是11.36 in New York。请注意,那是UTC-4(目前是15:35 UTC)。在标准时间,你是UTC-5。
EDT并非真正的“完整”时区 - 它只是日光的一部分。像“America / New_York”这样的时区名称可以实现完整的时区。
现在,为什么你的服务器提供了错误的值,这是另一回事......如果你要求UTC时间,它会给你带来什么?
编辑:正如评论中所述,修复方法是从UTC转换,而不是从欧洲/伦敦转换:
$date = new DateTime($time, new DateTimeZone('UTC'))
(可能有更好的方法;我不是PHP开发人员。)