SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 06.04.2010 16:24:28

cooler
Завсегдатай
Зарегистрирован: 14.01.2010
Сообщений: 52

Разница между датами

Здравствуйте! Возник такой вопрос. У меня есть 2 поля time_start(timestamp) и time_stop(timestamp). Есть необходимость получить разницу между этими датами в формате xx days xx hours xx mins. Как это возможно сделать? Заранее благодарен.

Неактивен

 

#2 06.04.2010 17:02:09

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 845

Re: Разница между датами

Если у Вас разница между датами не больше года, то Вам нужно что-то типа


DATE_FORMAT(
    FROM_UNIXTIME(UNIX_TIMESTAMP(time_stop) - UNIX_TIMESTAMP(time_start)),
    '%j:%H:%i'
)


Если больше года - скажите, напишу, как сделать, когда больше года.

Неактивен

 

#3 06.04.2010 17:19:56

cooler
Завсегдатай
Зарегистрирован: 14.01.2010
Сообщений: 52

Re: Разница между датами

Спасибо большое. Но есть проблема. Даже не знаю с чем она связана. При вычислении дат 2010-04-06 16:40:00 и 2010-04-06 16:18:00 Ответ: 001:02:22

Неактивен

 

#4 06.04.2010 17:53:57

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Разница между датами

Разница между указанными датами составляет 1320 секунд (или 22 минуты).
FROM_UNIXTIME от 1320 секунд скажет вам 1970-01-01 02:22:00 (два часа этого из-за сдвига относительно гринвича для вашего временного пояса).
Ну а date_format(..., '%j:%H:%i') для этой даты и скажет 001:02:22

Неактивен

 

#5 06.04.2010 18:03:57

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 845

Re: Разница между датами

vasya прав. Впрочем, от этого не легче. Действительно FROM_UNIXTIME здесь не подходит. Надо как-то по-другому...

Кстати, с запросом я перемудрил, можно было просто
FROM_UNIXTIME(
    UNIX_TIMESTAMP(time_stop) - UNIX_TIMESTAMP(time_start),
    'j:%H:%i'
    )

Неактивен

 

#6 06.04.2010 18:07:21

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Разница между датами

Ну а просто здесь по ходу не получится.
Нужно самому писать процедуру, которая секунды переводит в дни, часы, минуты.
Другого решения я не вижу.

Неактивен

 

#7 06.04.2010 18:08:52

cooler
Завсегдатай
Зарегистрирован: 14.01.2010
Сообщений: 52

Re: Разница между датами

А вообще это сделать реально? Пока решаю уже в PHP, а с мускула получаю только разницу секунд. Но все же требуется получить готовую строку из мускула. Очень признателен за вашу помощь.

Неактивен

 

#8 06.04.2010 18:13:18

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 845

Re: Разница между датами

А вообще это сделать реально? Пока решаю уже в 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
    )

Неактивен

 

#9 06.04.2010 18:17:41

cooler
Завсегдатай
Зарегистрирован: 14.01.2010
Сообщений: 52

Re: Разница между датами

Всем спасибо за помощь.

Неактивен

 

#10 06.04.2010 18:20:44

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 845

Re: Разница между датами

Пожалуй, Вам действительно лучше маленькую MySQL-функцию, которая весь этот громоздкий код в себе инкапсулирует.

Неактивен

 

#11 10.07.2012 10:03:28

Gun_done
Участник
Зарегистрирован: 10.07.2012
Сообщений: 1

Re: Разница между датами

Вы, ребята, знаете толк в извращениях.


TIMEDIFF(expr,expr2)

TIMEDIFF()
 
returns the time between the start time expr and the end time expr2. expr and expr2 are time or date-and-time expressions, but both must be of the same type.

Отредактированно Gun_done (10.07.2012 10:05:55)

Неактивен

 

#12 29.12.2016 09:40:25

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Re: Разница между датами

Вставлю свои 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.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson