Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте! Возник такой вопрос. У меня есть 2 поля time_start(timestamp) и time_stop(timestamp). Есть необходимость получить разницу между этими датами в формате xx days xx hours xx mins. Как это возможно сделать? Заранее благодарен.
Неактивен
Если у Вас разница между датами не больше года, то Вам нужно что-то типа
DATE_FORMAT(
FROM_UNIXTIME(UNIX_TIMESTAMP(time_stop) - UNIX_TIMESTAMP(time_start)),
'%j:%H:%i'
)
Если больше года - скажите, напишу, как сделать, когда больше года.
Неактивен
Спасибо большое. Но есть проблема. Даже не знаю с чем она связана. При вычислении дат 2010-04-06 16:40:00 и 2010-04-06 16:18:00 Ответ: 001:02:22
Неактивен
Разница между указанными датами составляет 1320 секунд (или 22 минуты).
FROM_UNIXTIME от 1320 секунд скажет вам 1970-01-01 02:22:00 (два часа этого из-за сдвига относительно гринвича для вашего временного пояса).
Ну а date_format(..., '%j:%H:%i') для этой даты и скажет 001:02:22
Неактивен
vasya прав. Впрочем, от этого не легче. Действительно FROM_UNIXTIME здесь не подходит. Надо как-то по-другому...
Кстати, с запросом я перемудрил, можно было просто
FROM_UNIXTIME(
UNIX_TIMESTAMP(time_stop) - UNIX_TIMESTAMP(time_start),
'j:%H:%i'
)
Неактивен
Ну а просто здесь по ходу не получится.
Нужно самому писать процедуру, которая секунды переводит в дни, часы, минуты.
Другого решения я не вижу.
Неактивен
А вообще это сделать реально? Пока решаю уже в PHP, а с мускула получаю только разницу секунд. Но все же требуется получить готовую строку из мускула. Очень признателен за вашу помощь.
Неактивен
А вообще это сделать реально? Пока решаю уже в PHP, а с мускула получаю только разницу секунд.
Честно говоря, лучше так и делать. Т.к. здесь нужно детальное программирование, а MySQL для этого менее удобен.
Если все-таки хотите сразу из MySQL, то отталкивайтесь вот от этого:
SELECT CONCAT(
( UNIX_TIMESTAMP(time_stop) - UNIX_TIMESTAMP(time_start) ) DIV 84600,
':',
( ( UNIX_TIMESTAMP(time_stop) - UNIX_TIMESTAMP(time_start) ) MOD 84600 ) DIV 3600,
':',
( ( UNIX_TIMESTAMP(time_stop) - UNIX_TIMESTAMP(time_start) ) MOD 3600 ) DIV 60
)
Неактивен
Всем спасибо за помощь.
Неактивен
Пожалуй, Вам действительно лучше маленькую MySQL-функцию, которая весь этот громоздкий код в себе инкапсулирует.
Неактивен
Вы, ребята, знаете толк в извращениях.
Отредактированно Gun_done (10.07.2012 10:05:55)
Неактивен
Вставлю свои 5 копеек
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
MySql Help написал:
Adds the integer expression interval to the date or datetime expression datetime_expr. The unit for interval is given by the unit argument, which should be one of the following values: MICROSECOND (microseconds), SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, or YEAR.
It is possible to use FRAC_SECOND in place of MICROSECOND, but FRAC_SECOND is deprecated.
The unit value may be specified using one of keywords as shown, or with a prefix of SQL_TSI_. For example, DAY and SQL_TSI_DAY both are legal.
Неактивен