Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么date()不正确地应用DST?_Php_Date_Timezone_Unix Timestamp - Fatal编程技术网

Php 为什么date()不正确地应用DST?

Php 为什么date()不正确地应用DST?,php,date,timezone,unix-timestamp,Php,Date,Timezone,Unix Timestamp,为了计算和操作的目的,我试图将人类可读的上午7点转换为PHP中的时间戳。时间戳被正确地创建为25200,但是date()函数奇怪地将时间戳转换回08:00(当我使用伦敦作为时区时),08:00(正确地)当使用柏林时,但是09:00(当使用雅典时) 我无法理解为什么它不在07:00返回,为什么它应该与柏林相同。我的服务器在德国,我在伦敦,这可能与此有关吗?几乎没有,因为我在伦敦的笔记本电脑上的XAMPP堆栈也有同样的问题 date_default_timezone_set('Europe/Lond

为了计算和操作的目的,我试图将人类可读的上午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返回,为什么它应该与柏林相同

你的。将时区设置为“欧洲/伦敦”将时间更改为08:00的原因是,英国在1968年10月27日至1971年10月31日期间运行UTC+1。因此,伦敦当地时间1970年1月1日协调世界时07:00为08:00

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


我还建议您学习使用,因为他们会透明地为您处理所有这些问题。

您似乎对它们的工作原理有着根本性的误解。你也没有正确理解它,因为它与如何应用它的政治变化有关

但是,要回答您的具体问题

我无法理解为什么它不在07:00返回,为什么它应该与柏林相同

你的。将时区设置为“欧洲/伦敦”将时间更改为08:00的原因是,英国在1968年10月27日至1971年10月31日期间运行UTC+1。因此,伦敦当地时间1970年1月1日协调世界时07:00为08:00

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


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

您的目标是什么?时区如何与您想要的最终结果相匹配?您正在计算的时间戳被视为自1970年1月1日00:00:00开始的时间(以秒为单位),而不是从昨晚午夜开始的时间。我使用它来定义具有可变粒度以及可变开始和结束时间的在线日历。因此,当我允许用户在GUI中定义“7”的开始时间和“15”分钟的粒度时,我将这些时间转换为时间戳,这样我就可以相应地创建日历数组。虽然我已经使用这种方法多年了,但我现在正在编写一个新系统来使用相同的数据库,因此我无法轻松地更改许多内容。对于这些计算,我不想要时区,我想它只会从1970年1月1日开始计算,而不考虑时区,但它们似乎会影响转换?我确实想在我的代码中为它的其他方面定义时区,但这让我感到困惑,转换将改变雅典,而不是伦敦……欢迎来到互联网时间的世界。PHP时间戳始终为UTC 1970年1月1日午夜后的秒数。伦敦当地时间为UTC或UTC+1,具体取决于年份和时间。柏林将是UTC+1或UTC+2。您的服务器可能会在任何本地时间工作,除非您更改它,但时间戳仍然是UTC。祝你好运你在这里的目标是什么?时区如何与您想要的最终结果相匹配?您正在计算的时间戳被视为自1970年1月1日00:00:00开始的时间(以秒为单位),而不是从昨晚午夜开始的时间。我使用它来定义具有可变粒度以及可变开始和结束时间的在线日历。因此,当我允许用户在GUI中定义“7”的开始时间和“15”分钟的粒度时,我将这些时间转换为时间戳,这样我就可以相应地创建日历数组。虽然我已经使用这种方法多年了,但我现在正在编写一个新系统来使用相同的数据库,因此我无法轻松地更改许多内容。对于这些计算,我不想要时区,我想它只会从1970年1月1日开始计算,而不考虑时区,但它们似乎会影响转换?我确实想在我的代码中为它的其他方面定义时区,但这让我感到困惑,转换将改变雅典,而不是伦敦……欢迎来到互联网时间的世界。PHP时间戳始终为UTC 1970年1月1日午夜后的秒数。伦敦当地时间为UTC或UTC+1,具体取决于年份和时间。柏林将是UTC+1或UTC+2。您的服务器可能会在任何本地时间工作,除非您更改它,但时间戳仍然是UTC。祝你好运谢谢你,瓦斯科海特,这帮了大忙。我想,我有一个基本的了解,时间戳是什么,它们是如何工作的,但我不知道英国在冬季会偏离UTC:当然,现在是我学习日期时间课程的时候了,我用时间戳来操纵时间和日期,这对我来说是很好的。但很可能是不必要的复杂。谢谢你鼓励我学习更好的做事方法,特别是终于解开了困扰我好几年的谜团。谢谢你,瓦斯科维特,这帮了我大忙。我喜欢认为我已经基本了解了时间戳是什么以及它们是如何工作的,但是