Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> datetime - промежуток 
V
    Опции темы
flashaa
Дата 30.6.2007, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 2
Всего: 25



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

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

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

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

Это сообщение отредактировал(а) flashaa - 30.6.2007, 02:17
PM MAIL   Вверх
Всемогущий
Дата 30.6.2007, 06:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 2
Всего: 13





--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
sTa1kEr
Дата 30.6.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 9
Всего: 146



Цитата(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) 

Да на самом деле все намного проще TIMESTAMPDIFF(). Т.е. вы можете получить необходимую разницу в нужных юнитах не отходя от БД smile
Код

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

Если нужна разница в "человеческих" часах (т.е. с минутами, секундами, а не дробью), то почитайте про TIMEDIFF()
PM MAIL   Вверх
flashaa
Дата 30.6.2007, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 2
Всего: 25



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

Это сообщение отредактировал(а) flashaa - 30.6.2007, 17:48
PM MAIL   Вверх
SelenIT
Дата 30.6.2007, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 9
Всего: 401



База тоже знает текущую дату - NOW().


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
sTa1kEr
Дата 1.7.2007, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 9
Всего: 146



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

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

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


Это сообщение отредактировал(а) sTa1kEr - 1.7.2007, 00:48
PM MAIL   Вверх
flashaa
Дата 1.7.2007, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 2
Всего: 25



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

Это сообщение отредактировал(а) flashaa - 1.7.2007, 17:57
PM MAIL   Вверх
flashaa
Дата 2.7.2007, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 2
Всего: 25



Что-то неверный запрос...
вот что ввожу в 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




Это сообщение отредактировал(а) flashaa - 2.7.2007, 02:01
PM MAIL   Вверх
sTa1kEr
Дата 2.7.2007, 02:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 9
Всего: 146



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

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

PM MAIL   Вверх
flashaa
Дата 3.7.2007, 03:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 2
Всего: 25



не могли вы сказать подробнее про эту функцию? на php.net ее нет
PM MAIL   Вверх
sTa1kEr
Дата 3.7.2007, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 9
Всего: 146



Это функция MySQL аналогична функции PHP mktime(), т.е. она возвращает метку времени юникс. http://dev.mysql.com/doc/refman/4.1/en/dat..._unix-timestamp
PM MAIL   Вверх
flashaa
Дата 3.7.2007, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 2
Всего: 25



Ага, значит сколько секунд прошло с 1970 года ) , значит используя разность дат я смогу избавиться от начала отчета 1970 и считать полноценные даты..
Спасибо, с ПХП я конечно облажался, надо было в Мускл  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0532 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.