Вычислить разницу между датами

153
07 июля 2019, 12:10

Есть таблица Mysql, в ней столбец "data" с типом datetime. Нужно взять текущую дату и время и посчитать разницу с табличным значением и вывести результат в формате dd-hh-mm

SELECT SEC_TO_TIME(UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(users.data)) from users where UserId=999929921;

пробовал вот так, все работает до тех пор, пока разница между датами не больше 1 дня, далее выводится ошибка, так как SEC_TO_TIME работает в интервале 24 часов к сожалению. Собственно вопрос, как правильно написать запрос?

Answer 1

Можно например как нибудь так:

concat(lpad(floor((@h:=time_format(@tm:=timediff(now(), users.data), '%H'))/24), 2, '0'),
       '-',
       lpad(@h % 24, 2, '0'),
       '-',
       time_format(@tm, '%i'))

Вопрос в том, а стоит ли делать такие громоздкие конструкции в SQL, если на клиенте обычно гораздо больше средств для форматирования времени.

Пример на SQLFiddle.com

Answer 2

Можно получить diff в секундах и делением с округлением в меньшую сторону построить нужную дату. Вот пример без форматирования и только для дней-часов. Остальное, думаю, не сложно дописать, если решение устроит.

SELECT
    t.total_seconds,
    t.total_days,
    FLOOR((t.total_seconds - (t.total_days * 24 * 60 * 60)) / (60 * 60)) AS total_hours
FROM (
    SELECT
        t.total_seconds,
        FLOOR(t.total_seconds / (24 * 60 * 60)) AS total_days
    FROM (
        SELECT TIME_TO_SEC(
            TIMEDIFF("2018-12-25 18:40:00", "2018-12-23 15:20:30")
        ) AS total_seconds
    ) t
) t

Вывод:

total_seconds total_days total_hours
       184770          2           3
READ ALSO
Переместить placeholder вверх input'а

Переместить placeholder вверх input'а

Каким образом можно вынести текст в placeholder в левый верхний угол окна ввода?

145
Анимация в браузере Microsoft Edge

Анимация в браузере Microsoft Edge

У меня есть анимация, и она работает четко во всех браузерах, но когда я открываю страницу через Microsoft Edge, моя анимация не работает, и я не вижу...

236
Неправильный margin в css

Неправильный margin в css

Возникла проблема при заполнении контейнера в css

154
Работа с элементом, который вложен в другой

Работа с элементом, который вложен в другой

Как работать с элементами, которые находятся внутри другого элемента?

112