我正在为不同的时区显示时间,问题是我的服务器正在运行PHP v5.3.25而在我的本地计算机上我有v5.5.9
当我设置特定的时区并显示其时间时,我的本地计算机显示它很好,但服务器在夏令时期间不会增加小时数。
date_default_timezone_set('Europe/London');
echo date('Y-m-d H:i:s');
我为它创建了一个解决方法:
date_default_timezone_set('Europe/London');
$is_dst = date('I');
if($is_dst) {
$date = date('Y-m-d H:i:s', strtotime('+1 hours', strtotime(date('Y-m-d H:i:s'))));
} else {
$date = date('Y-m-d H:i:s');
}
echo $date;
这种解决方法适用于英国,但我想要一个动态且有效的解决方案来显示时间。此外,当我使用PHPMailer发送电子邮件时,由于夏令时问题,它在接收端显示错误的时间戳。
答案 0 :(得分:1)
这不是处理DST的可靠方法,因为有些地方没有使用完整的时间,或根本没有使用它。 The DateTime extension为你处理了所有这些,自PHP 5.2以来它已经存在,所以你应该能够做到这一点:
date_default_timezone_set('Etc/UTC');
$date = new DateTime(null, new DateTimeZone('Europe/Amsterdam'));
通常,您应该始终使用UTC作为内部时间戳,否则很容易让人感到困惑。无论何时需要向他们显示内容,都要转换为用户的时区 - 当然这意味着您需要知道用户的时区,并且通常您需要从JS获得该时区,因为它&#39 ; $_SERVER
中未包含此内容,但您可以从地理数据中推断出来,或者要求用户在您应用的首选项中明确指定区域。
答案 1 :(得分:0)
事实证明,服务器时间与UTC时间不同步。我和我的托管服务提供商开了一张票,他们为我启动了NTP服务。所以问题不在于PHP,而是在停止NTP服务。现在,我的服务器时间已同步,并且正在遵循夏令时。