我正在尝试将人工可读的7英尺时间转换为PHP中的时间戳,以用于计算和操作。时间戳被正确创建为25200,但是当我使用伦敦作为时区时,date()函数奇怪地将时间戳转换回08:00,使用柏林时为08:00(正确),但使用雅典时为09:00。 / p>
我无法理解为什么它不会在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。
答案 0 :(得分:1)
您似乎对what a timestamp is及其运作方式存在根本性误解。你也没有正确地理解DST,因为它的政治变化如何应用。{/ p>
但是,要回答您的具体问题
我无法理解为什么它不会返回07:00以及为什么它应该与柏林相同。
你的timestamp represents 07:00 UTC on 1st January 1970。将时区设置为“欧洲/伦敦”的原因将时间更改为08:00是因为英国正在运行British Standard Time experiment
,从1968年10月27日到1971年10月31日,英国保持UTC + 1。因此,当地1970年1月1日伦敦时间07:00 UTC时间是08:00。
我建议你的时间戳应该始终是代表完整日期和时间的完整时间戳。试图只代表时间是通向痛苦的道路。
我还建议学习使用DateTime classes,因为他们会透明地为您处理所有这些。