TIMESTAMP для дат до 01.01.1970 года - MySQL

Узнай цену своей работы

Формулировка задачи:

Подскажите-ка такой вопросик: PHP умеет корректно обрабатывать штампы времени и до 01.01.1970 и после. Т.е. если, к примеру, вывести
date("d.m.Y H:i:s",-100)
то получим 31.12.1969 23:58:20 Я храню даты в табличке MySQL в поле с типом INT(10) И на днях случайно обнаружил, что функция FROM_UNIXTIME() не понимает отрицательных чисел (что расстраивает, как минимум). Может быть есть варианты решения проблемы без использования PHP (ну или другой внешней обработки)?

Решение задачи: «TIMESTAMP для дат до 01.01.1970 года»

textual
Листинг программы
SELECT DATE_ADD(FROM_UNIXTIME(0), INTERVAL `mid` SECOND) FROM `MSEDate`;
+---------------------------------------------------+
| DATE_ADD(FROM_UNIXTIME(0), INTERVAL `mid` SECOND) |
+---------------------------------------------------+
| 1956-11-11 06:00:00                               |
+---------------------------------------------------+
1 ROW IN SET (0.00 sec)

Объяснение кода листинга программы

Код выполняет следующую задачу:

  1. DATE_ADD(FROM_UNIXTIME(0), INTERVALmidSECOND) — это выражение, которое принимает два параметра: начальную дату (FROM_UNIXTIME(0)) и интервал времени в секундах (mid). Функция DATE_ADD добавляет указанный интервал к начальной дате.
  2. FROM_UNIXTIME(0) — это функция, которая преобразует Unix timestamp (в данном случае равный 0, что соответствует дате 01.01.1970) в дату.
  3. MID — это имя столбца в таблице MSEDate, который содержит Unix timestamp.
  4. Результатом выражения является дата 11.11.1956 06:00:00. Таким образом, данный код получает дату из столбца MID в таблице MSEDate, преобразует её в Unix timestamp, добавляет к ней интервал в одну секунду и выводит результат.

Оцени полезность:

5   голосов , оценка 4.6 из 5
Похожие ответы