Получить относительную дату из функции NOW ()

Я пытаюсь получить относительную дату и время из функции MySQL NOW() (например, 2 секунды назад, 3 дня назад, 31 декабря), но я понятия не имею, как это сделать! Есть идеи? Спасибо огромное!

Используйте функцию TIMESTAMPDIFF() . См. Пример:

 SELECT TIMESTAMPDIFF(SECOND, `stamp_column`, NOW()) as `seconds` FROM `YourTable` 

Или используйте эту сохраненную функцию:

 CREATE FUNCTION `PassedSince`(`stamp` TIMESTAMP) RETURNS VARCHAR(100) DETERMINISTIC BEGIN DECLARE `result` VARCHAR(100) DEFAULT ''; DECLARE `seconds`, `minutes`, `hours`, `days` INT; SET `seconds` = TIMESTAMPDIFF(SECOND, `stamp`, NOW()); SET `days` = `seconds` DIV (24 * 60 * 60); SET `seconds` = `seconds` MOD (24 * 60 * 60); IF `days` > 0 THEN SET `result` = CONCAT(`result`, `days`, ' Days '); END IF; SET `hours` = `seconds` DIV (60 * 60); SET `seconds` = `seconds` MOD (60 * 60); IF `hours` > 0 THEN SET `result` = CONCAT(`result`, `hours`, ' Hours '); END IF; SET `minutes` = `seconds` DIV 60; SET `seconds` = `seconds` MOD 60; IF `minutes` > 0 THEN SET `result` = CONCAT(`result`, `minutes`, ' Minutes '); END IF; IF `seconds` > 0 THEN SET `result` = CONCAT(`result`, `seconds`, ' Seconds '); END IF; RETURN TRIM(`result`); END 

Для запроса:

 SELECT `PassedSince`('2013-06-19 08:00') as `result` UNION ALL SELECT `PassedSince`('2013-01-01 00:00') 

Показывает:

 result -------------------------------------- 1 Hours 20 Minutes 55 Seconds 169 Days 9 Hours 20 Minutes 55 Seconds 

Вы должны указать время, или в вашем случае секунды, заранее.

Позвольте мне проиллюстрировать, что я имею в виду, с простым примером, на основе запроса PDO-Mysql

 $time = '0:01:00'; // one minute $stmt = $conn->prepare("SELECT chat_user FROM chatters WHERE TIMEDIFF(NOW(), login_time) < TIME (?) ); 

В приведенном выше примере, если вы используете запрос, вы фактически будете искать пользователя, время входа в систему которого меньше, чем $time или 01:00:00