Если в БД две записи со временем в TIMESTAMP Первая запись - сейчас(+- 5 минут) Вторая - до 7 дней назад Нужно от первого времени отнять второе и узнать разницу в формате %дней, %часов, %минут, %секунд Сделал вот такое, но этот запрос выводит разницу не больше суток то есть если разница в 36 часов, будет писать 12 PHP: $sql = mysql_query("SELECT TIME_TO_SEC('$date') - TIME_TO_SEC('$d') AS 'interval in seconds'", $link); while ($result = mysql_fetch_array($sql)) { $_ = $result['interval in seconds']; $days = intval($_/86400); if($days != 0) { echo $days, ' д. '; } $hours = intval(($_-$days*86400)/3600); if($hours != 0) { echo $hours, ' ч. '; } $min = intval(($_-$days*86400-$hours*3600)/60); if($min != 0) { echo $min, ' мин. '; } $sec = intval($_-$days*86400-$hours*3600-$min*60); if($sec != 0) { echo $sec, ' с. '; } echo $results['report'], '<div class="sep"></div>'; } Был еще один вариант с помощью БД, но тут скорее всего что-то я недопонимаю... потому что это не работает совсем... PHP: CREATE PROCEDURE get_my_time ( time VARCHAR(20)) BEGIN DECLARE beg TIMESTAMP; DECLARE ends TIMESTAMP; DECLARE INTERVAL DOUBLE PRECISION; DECLARE hours INT; DECLARE mins INT; DECLARE sec INT; SELECT datetime INTO beg, datetim INTO ends FROM reports WHERE id = 29; INTERVAL = beg - ends; IF (INTERVAL < 0) THEN INTERVAL = -INTERVAL; INTERVAL = INTERVAL*24; IF (CAST(INTERVAL AS INT) > INTERVAL) THEN hours = INTERVAL - 1; ELSE hours = INTERVAL; INTERVAL = (INTERVAL - hours)*60; IF (CAST(INTERVAL AS INT) > INTERVAL) THEN mins = INTERVAL - 1; ELSE mins = INTERVAL; sec = (INTERVAL - mins)*60; IF (sec = 60) THEN sec = 59; _time = hours || ':' || CASE WHEN mins>10 THEN mins ELSE '0' || mins END || ':' || CASE WHEN sec>10 THEN sec ELSE '0' || sec END; suspend; END
SELECT TIME_TO_SEC('$date') - TIME_TO_SEC('$d') $date - это первое значение со временем $d - второе Знаю что дату не учитывает, поэтому и спрашиваю как можно сделать по другому
Ну если знаешь тогда зачем мучишься тем более если у тебя там действительно TIMESTAMP. Выбираешь запись. Отнимаешь от первого второе и все. Если там дата тоже самое есть strtotime. Или переводи все в дата. Или просто убери TIME_TO_SEC и отнимай в sql PHP: $datetime1 = new DateTime('2009-10-11 10:10'); $datetime2 = new DateTime('2009-10-13 09:12'); $interval = $datetime1->diff($datetime2); echo $interval->format("%D:%H:%I:%S"); --- Добавлено --- https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timestampdiff или вот так как то
Спасибо не подскажешь еще как сделать чтобы время выводилось так: 02 д. 49 мин. 13 сек. вместо этого: 02 д. 00 ч. 49 мин. 13 сек.