5

学习约会,他们现在让我很难过。

$london = new DateTime();
$london->setTimestamp(0);
$london->setTimeZone(new DateTimeZone('Europe/London'));

echo $london ->format('d-m-Y H-i-s');

结果:

01-01-1970 01-00-00

UTC +0:00因此午夜不应该是伦敦吗?例如,New York 返回上一个日期的 19:00,这是正确的UTC -5:00。莫斯科返回01-01-1970 03-00-00这又是不正确的(UTC +3:00而不是UTC +4:00

但是,当不使用->setTimestamp时,伦敦当前时间会正确呈现。

实时代码: http ://sandbox.onlinephpfunctions.com/

另外,我的本地时区是Europe/PragueUTC +1:00)。也经过测试date_default_timezone_set('Europe/London')

我认为我的逻辑有一些错误?

4

1 回答 1

12

这是因为显然,英国在1970 年 1 月 1 日是英国夏令时,比 UTC 早一小时(强调我的):

在 1959-60 年冬季进行的一项调查中,咨询了 180 个国家组织,结果显示,他们略微倾向于更改为全年 GMT+1,但夏季时间的长度被延长为试验而非国内使用取消格林威治标准时间。 [6] 1966-67 年间的进一步调查导致哈罗德威尔逊政府引入了英国标准时间实验,英国全年保持 GMT+1。这发生在 1968 年 10 月 27 日至 1971 年 10 月 31 日之间,当时恢复了之前的安排。

timeanddate.com 的时区转换器是查找此类内容的绝佳工具。

于 2013-02-16T14:04:38.967 回答