TIMESTAMP для дат до 01.01.1970 года - MySQL
Формулировка задачи:
Подскажите-ка такой вопросик: PHP умеет корректно обрабатывать штампы времени и до 01.01.1970 и после. Т.е. если, к примеру, вывести то получим 31.12.1969 23:58:20
Я храню даты в табличке MySQL в поле с типом INT(10)
И на днях случайно обнаружил, что функция FROM_UNIXTIME() не понимает отрицательных чисел (что расстраивает, как минимум).
Может быть есть варианты решения проблемы без использования PHP (ну или другой внешней обработки)?
date("d.m.Y H:i:s",-100)
Решение задачи: «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)
Объяснение кода листинга программы
Код выполняет следующую задачу:
DATE_ADD(FROM_UNIXTIME(0), INTERVAL
midSECOND)
— это выражение, которое принимает два параметра: начальную дату (FROM_UNIXTIME(0)) и интервал времени в секундах (mid
). Функция DATE_ADD добавляет указанный интервал к начальной дате.FROM_UNIXTIME(0)
— это функция, которая преобразует Unix timestamp (в данном случае равный 0, что соответствует дате 01.01.1970) в дату.MID
— это имя столбца в таблицеMSEDate
, который содержит Unix timestamp.- Результатом выражения является дата 11.11.1956 06:00:00.
Таким образом, данный код получает дату из столбца
MID
в таблицеMSEDate
, преобразует её в Unix timestamp, добавляет к ней интервал в одну секунду и выводит результат.