UNIX timestamp(0): Europe/London returns UTC+1

时光怂恿深爱的人放手 提交于 2019-11-28 04:28:21

问题


Learning dates and they're giving me hard time right now.

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

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

result:

01-01-1970 01-00-00

Shouldn't be London in UTC +0:00 therefore midnight? For example, New York returns 19:00 of the previous date which is correctly UTC -5:00. Moscow returns 01-01-1970 03-00-00 which is again incorrect (UTC +3:00 as opposed to UTC +4:00)

When not using ->setTimestamp, the London current time renders correctly, though.

Livecode: http://sandbox.onlinephpfunctions.com/

Also, my local timezone is Europe/Prague (UTC +1:00). Tested with date_default_timezone_set('Europe/London') as well.

I presume there's some error in my logic?


回答1:


This is because apparently, Great Britain was on British Summer Time on January 1, 1970, one hour ahead of UTC (emphasis mine):

An inquiry during the winter of 1959–60, in which 180 national organisations were consulted, revealed a slight preference for a change to all-year GMT+1, but the length of summer time was extended as a trial rather than the domestic use of Greenwich Mean Time abolished.[6] A further inquiry during 1966–67 led the government of Harold Wilson to introduce the British Standard Time experiment, with Britain remaining on GMT+1 throughout the year. This took place between 27 October 1968 and 31 October 1971, when there was a reversion to the previous arrangement.

timeanddate.com's Time Zone Converter is a great tool for finding out stuff like this.



来源:https://stackoverflow.com/questions/14911078/unix-timestamp0-europe-london-returns-utc1

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!