为什么date()应用夏令时不正确


Why is date() applying DST incorrectly?

我正试图将早上7点的人类可读时间转换为PHP中的时间戳,用于计算和操作。时间戳被正确地创建为25200,但date()函数奇怪地将时间戳转换回08:00(当我使用伦敦作为时区时),08:00(正确地)(当使用柏林时),但09:00(当使用雅典时)。

我不明白为什么它没有在07:00返回,为什么它应该和柏林一样。我的服务器在德国,我在伦敦,这可能与此有关吗?几乎没有,因为我在伦敦的笔记本电脑上的XAMPP堆栈也有同样的问题。

date_default_timezone_set('Europe/London');
$time_readable = 7;
$time_stamp = $time_readable * 60 * 60;
echo $time_stamp;
echo date('H':i',$time_stamp);

我甚至在代码前面加了

date_default_timezone_set('UTC');
date_default_timezone_set('Europe/London'); 

但问题依然存在。

我忽略了什么?

我在服务器上的PHP版本在德国生产机器上是5.2.12,在我的英国笔记本电脑XAMPP堆栈上是5.3.1。

您似乎对时间戳是什么以及它们是如何工作的有着根本的误解。你也没有正确理解夏令时,因为它的应用方式伴随着政治变化。

然而,为了回答您的具体问题,

我不明白为什么它没有在07:00返回,为什么它应该和柏林一样。

您的时间戳表示1970年1月1日07:00 UTC。将时区设置为"欧洲/伦敦"将时间更改为08:00的原因是,英国运行British Standard Time experiment,使英国在1968年10月27日至1971年10月31日期间保持UTC+1。因此,伦敦当地时间1970年1月1日07:00 UTC为08:00。

我建议您的时间戳应该始终是代表完整日期和时间的完整时间戳。试图只代表时代是通往痛苦的道路。

我还建议学习使用DateTime类,因为它们将透明地为您处理所有这些。