Как конвертировать UNIX время до 1970 года в формат даты в MySQL?
У меня есть база данных, использующая время unix для своих дат (я использую mySQL). Я хочу получить даты в формате daily date. Вот мой вопрос:
SELECT FROM_UNIXTIME(time_created) FROM member
это отлично работает с датами после 1970 года (например, 1314162229), но не работает для дат до 1970 года (например, -769338000). Здесь есть работа?
4 ответов
возможным обходным путем было бы иметь константу, соответствующую секундам за определенное количество лет (предпочтительно кратную 4). Вы могли бы добавить эту константу, перевести время, а затем вычесть количество лет.
пример: выберите 40 лет.
определить константы:
MySQL [files]> select adddate(from_unixtime(0), interval 40 year);
+---------------------------------------------+
| adddate(from_unixtime(0), interval 40 year) |
+---------------------------------------------+
| 2010-01-01 01:00:00 |
+---------------------------------------------+
1 row in set (0.09 sec)
MySQL [files]> select unix_timestamp(adddate(from_unixtime(0), interval 40 year));
+-------------------------------------------------------------+
| unix_timestamp(adddate(from_unixtime(0), interval 40 year)) |
+-------------------------------------------------------------+
| 1262304000 |
+-------------------------------------------------------------+
1 row in set (0.09 sec)
теперь вы можете каждый unix timestamp x
между 1930 и 20xx и использовать его.
select subdate(from_unixtime(x+1262304000), interval 40 year);
С вас пример -769338000
, вы get
MySQL [files]> select subdate(from_unixtime(-769338000+1262304000), interval 40 year);
+-----------------------------------------------------------------+
| subdate(from_unixtime(-769338000+1262304000), interval 40 year) |
+-----------------------------------------------------------------+
| 1945-08-15 17:00:00 |
+-----------------------------------------------------------------+
1 row in set (0.09 sec)
Я нашел новый способ:
преобразование в MySQL дата:
SELECT DATE_ADD(FROM_UNIXTIME(0), interval YOURTIMESTAMPHERE second);
преобразование вашей эпохи в строку даты:
SELECT DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), interval YOURTIMESTAMPHERE second), '%Y-%m-%d');
и обратно
SELECT TIMESTAMPDIFF(second,FROM_UNIXTIME(0),'1960-01-01 00:00:00' );
источник: http://www.epochconverter.com/programming/mysql-from-unixtime.php#negavtiveEpoch
SELECT DATE_ADD(CAST('1970-01-01 00:00:00' AS DATETIME), INTERVAL `time_created` SECOND) FROM `member`
насколько мне известно, там is нет такой вещи, как время UNIX до 1/1/1970 00: 00 UTC. Подробнее на Википедия.