Это отличный вопрос. Тот, который даже отбросил меня, из-за этого .
Однако в вашем случае Германия была, как вы сказали по UTC + 01: 00, следовательно, в вашей системе значение $date
is 1970-01-01T00:00:00+01:00
.
Если вы измените сценарий и попытаетесь выяснить, какая дата соответствует метке времени 0
, это должно помочь вам понять, как часовые пояса работают с метками времени.
$date = DateTime::createFromFormat ('U', '0');
$date->setTimezone(new DateTimeZone('Europe/Berlin'));
echo $date->format(DATE_ATOM); // 1970-01-01T01:00:00+01:00
Поскольку временные метки представляют собой относительную разницу времени от эпохи UNIX в секундах, это будет другое время в другом часовом поясе. Этот подсчет начинается в полночь 1 января 1970 года в UTC. В то время как Великобритания и Германия были в UTC + 01: 00 в 1970 году, эпоха UNIX началась для них 1970-01-01 01:00:00
С точки зрения того, как лучше всего с этим справиться, ну ... это основано на мнении,Вероятно, большинство людей посоветовали бы вам иметь дело со временем в UTC, чтобы вы не сталкивались с такими странными проблемами, как эта, а только конвертировали в нужный часовой пояс на дисплее, но даже великий Джон Скит имел другое мнение ,