Почему временные метки unix PHP и MySQL в 1983-10-29 расходятся?

Я использовал в своем приложении функции PHP strtotime и MySQL UNIX_TIMESTAMP для преобразования даты в метки времени. PHP и MySQL работают на моем локальном компьютере, и эти функции обычно возвращают тот же результат, что и я ожидал:

$ php
<?php echo strtotime("2011-06-02"); ?>
1307001600

mysql> SELECT UNIX_TIMESTAMP("2011-06-02") ts;
+------------+
| ts         |
+------------+
| 1307001600 |
+------------+

Но, вроде как случайно, я заметил, что когда я ввел 1983-01-01 в качестве даты результаты больше не были равными:

$ php
<?php echo strtotime("1983-01-01"); ?>
410263200

mysql> SELECT UNIX_TIMESTAMP("1983-01-01") ts;
+-----------+
| ts        |
+-----------+
| 410256000 |
+-----------+

Как видите, PHP вернул 410263200, а MySQL вернул 410256000 - разница в 7200 секунд.

Это вызвало у меня любопытство, и я хотел знать в какую дату отметки времени больше не были эквивалентными, поэтому я написал небольшую программу, которая начинается с сегодняшней даты (в формате Ymd), использует PHP strtotime и MySQL UNIX_TIMESTAMP и сравнивает результаты. Затем он вычитает 1 день из каждого значения и выполняет цикл до тех пор, пока они не перестанут быть равными.

Результат:

1983-10-29

29 октября 1983 года по какой-то причине strtotime и UNIX_TIMESTAMP возвращают значения, которые отличаются на 7200 секунд.

Есть идеи?

Спасибо за внимание.

29
задан echo 2 June 2011 в 14:15
поделиться