Задать вопрос
ILoveYAnny
@ILoveYAnny

Как получить разницу в секундах (минутах) между текущей датой и записью в БД PostgreSQL?

При определённом действии я заношу в БД лог с Timetamp, через N-ое количество времени, я совершаю ещё одно действие, и если прошло 2 минуты (А лучше всего 140 секунд), я получаю результат и добавляю ещё одну запись в БД, то есть обновляю последний лог и уже по нему свожу сверку.

Реализовал несколько решений, но все они мне не устраивают и имеют недостатки. Если вкратце, то при втором действии я получаю я получаю дату первого действия из БД, через

SELECT ::to_char(time_send, 'HH24:MI:SS')

Привожу результат к нужному формату через DateTime
И получаю текущую дату через new DateTime
Дальше пробовал сравнивать встроенным методом diff, как я только не пробовал и минуты и секунды.. Проблема в том, что он обнуляет счётчик секунд и минут, когда он достигнет 60, то есть я не смогу точно узнать сколько секунд или минут прошло, т.к. разница будет всегда в пределах 60.
Читал что есть параметр, который абсолютную величину выдаёт, но что-то у меня результат он так и не вывел

$diff = $last->diff($now, true);

Можно конечно получать время через time() или date() делать кучу преобразований и вычитать, но хочется адекватный изящный способ найти. В идеале в 1 строку без PHP, запрос в PostGRE, где идёт проверка со ячейкой содержащий дату. Если прошло 140 секунд то возвращаем тру, не прошло то фолс, ну или хотя бы вернуть количество единиц прошедшего времени..
  • Вопрос задан
  • 10067 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@miholeus
select extract(epoch from (now() - time_send::timestamp))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы