Я использовал функции 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 секунд.
Есть идеи?
Спасибо за чтение.