Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > datetime - промежуток


Автор: flashaa 30.6.2007, 02:08
Привет снова. На этот раз вопрос такой: Имеется 2 даты из БД. Мне необходимо узнать между ними промежуток. (PHP)
Примерно представляю алгоритм так:

промежуток в секундах= (секунды1+минуты1*60+часы1*60*60+дни1*60*60*24) - (секунды2+минуты2*60+часы2*60*60+дни2*60*60*24) 

можно ещё года добавить чтобы было совсем точно. 
И собственно вопрос: как мне получить минуты, секунды и тп из дат, такой функции не обнаружил. Все функции работают с текущим временем системных часов.

И если мой вариант не оптимальный, поделитесь более правильным решением.

Автор: Всемогущий 30.6.2007, 06:26
http://mysql.org/doc/refman/5.1/en/date-and-time-functions.html#function_datediff

Автор: sTa1kEr 30.6.2007, 13:28
Цитата(flashaa @  30.6.2007,  02:08 Найти цитируемый пост)
Примерно представляю алгоритм так:

промежуток в секундах= (секунды1+минуты1*60+часы1*60*60+дни1*60*60*24) - (секунды2+минуты2*60+часы2*60*60+дни2*60*60*24) 

Да на самом деле все намного проще http://mysql.org/doc/refman/5.1/en/date-and-time-functions.html#function_timestampdiff. Т.е. вы можете получить необходимую разницу в нужных юнитах не отходя от БД smile
Код

SELECT TIMESTAMPDIFF(QUARTER, `date1`, `date2`) AS interal_quartr FROM `table`; -- интервал в кврталах ;)

Если нужна разница в "человеческих" часах (т.е. с минутами, секундами, а не дробью), то почитайте про http://mysql.org/doc/refman/5.1/en/date-and-time-functions.html#function_timediff

Автор: flashaa 30.6.2007, 17:44
Я не совсем правильно поставил вопрос. Одна дата из базы, а другая текущая, Хотя пожалуй можно запрос составить как вычитание текущей даты и БД.. Надо проверить, прошло ли 10 минут.

Автор: SelenIT 30.6.2007, 23:43
База тоже знает текущую дату - http://mysql.org/doc/refman/5.1/en/date-and-time-functions.html#function_now.

Автор: sTa1kEr 1.7.2007, 00:33
Цитата(flashaa @  30.6.2007,  17:44 Найти цитируемый пост)
Одна дата из базы, а другая текущая

Ну и в чем проблема? Как сказал SelenIT.
Код

SELECT TIMESTAMPDIFF(QUARTER, NOW(), `date1`) AS interal_quartr FROM `table`; -- интервал в кврталах ;)

Автор: flashaa 1.7.2007, 17:56
Все, спасибо. Мне вместо QUARTER надо MINUTE поставить и mysql_resut($r,0,"interval_minute"); сравнить с 10

Автор: flashaa 2.7.2007, 01:56
Что-то неверный запрос...
вот что ввожу в SQL

Код

SELECT TIMESTAMPDIFF(MINUTE, NOW(),'2007-07-01 09:35:06') AS minut FROM game where `id`=66


Вот что получаю: 

Цитата

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(MINUTE, NOW(),'2007-07-01 09:35:06') AS minut FROM game where ` 



Даже если взять прямо пример с ваших ссылок:

Код

SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');


Выдает:

Цитата

Ответ MySQL:  

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(MONTH,'2003-02-01','2003-05-01')' at line 1



Автор: sTa1kEr 2.7.2007, 02:20
Прошу прощенья... эта функция пояивилась только в 5ой версии MySQL, а у вас, видимо, 4ая. Тогда только через UNIX_TIMESTAMP() / 60
Код

SELECT (UNIX_TIMESTAMP() - UNIX_TIMESTAMP('2007-07-01 09:35:06') / 60) AS minut;

Автор: flashaa 3.7.2007, 03:13
не могли вы сказать подробнее про эту функцию? на php.net ее нет

Автор: sTa1kEr 3.7.2007, 09:35
Это функция MySQL аналогична функции PHP mktime(), т.е. она возвращает метку времени юникс. http://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html#function_unix-timestamp

Автор: flashaa 3.7.2007, 12:02
Ага, значит сколько секунд прошло с 1970 года ) , значит используя разность дат я смогу избавиться от начала отчета 1970 и считать полноценные даты..
Спасибо, с ПХП я конечно облажался, надо было в Мускл  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)