Я пытаюсь получить относительную дату и время из функции 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