Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Интервал между датами, в днях минутах секунда 
:(
    Опции темы
DIMONSOFT
Дата 21.9.2009, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: -3



Нужно получить разницу между текущей датой и полем в бд.
DATEDIFF выводит разницу только в днях, а мне нужно еще  в минутах, секундах.
Код

SELECT DATEDIFF('2009-09-23 00:10:45', NOW()) AS DiffDate

--------------------
PM MAIL   Вверх
Akina
Дата 21.9.2009, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

Репутация: 106
Всего: 454



Выведи в секундах и пересчитай.
Или указывай конкретную СУБД.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
DIMONSOFT
Дата 21.9.2009, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: -3



Цитата(Akina @  21.9.2009,  15:41 Найти цитируемый пост)
Или указывай конкретную СУБД. 

MySQL 5.0.81
--------------------
PM MAIL   Вверх
Gluttton
Дата 21.9.2009, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


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

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



Цитата(DIMONSOFT @  21.9.2009,  15:27 Найти цитируемый пост)
Нужно получить разницу между текущей датой и полем в бд

В каком формате должен быть представлен результат (строка, целое число)?


--------------------
Слава Україні!
PM MAIL   Вверх
DIMONSOFT
Дата 21.9.2009, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: -3



строка
--------------------
PM MAIL   Вверх
Zloxa
Дата 21.9.2009, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

Репутация: 33
Всего: 161



Работа с датами специфична для платформы.
Переношу в MySql, здесь оставляю зеркало.
К сожалению тему оставить здесь, а зеркало кинуть в MySql - прав не хватает.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Gluttton
Дата 23.9.2009, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


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

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



Познакомился я с MySQL'ем и спешу поделиться с тем, что у меня вышло...
Пусть в БД dbt есть таблица t состоящая из столбца b, заполненого следующими данными:
user posted image
Тогда запрос:
Код

SELECT
    CONCAT(
        S.MESSAGE,
        ' ',
        ABS(S.DAYS),
        ' дней и ',
        S.HOURS
    )   AS MESSAGE,
    S.FROM,
    S.TILL
FROM
(
    SELECT
        CASE
            /* Если дата в прошлом */
            WHEN UNIX_TIMESTAMP(dbt.t.b)-UNIX_TIMESTAMP(NOW())<0
                /* и время суток позднее текущего  */
                AND TIME_TO_SEC(dbt.t.b) - TIME_TO_SEC(NOW())>0
                /* то уменьшаем на один количество дней */
                THEN DATEDIFF(dbt.t.b, NOW())-1
            /* Если дата в прошлом */
            WHEN UNIX_TIMESTAMP(dbt.t.b)-UNIX_TIMESTAMP(NOW())<0
                /* и время суток ранее текущего */
                AND TIME_TO_SEC(dbt.t.b) - TIME_TO_SEC(NOW())<0
                /* то количество дней оставляем без изменения */
                THEN DATEDIFF(dbt.t.b, NOW())
            /* Если дата в будущем */
            WHEN UNIX_TIMESTAMP(dbt.t.b)-UNIX_TIMESTAMP(NOW())>0
                /* и время суток позднее текущего */
                AND TIME_TO_SEC(dbt.t.b) - TIME_TO_SEC(NOW())>0
                /* то количество дней оставляем без изменения */
                THEN DATEDIFF(dbt.t.b, NOW())
            /* Если дата в будущем */
            WHEN UNIX_TIMESTAMP(dbt.t.b)-UNIX_TIMESTAMP(NOW())>0
                /* и время суток ранее текущего */
                AND TIME_TO_SEC(dbt.t.b) - TIME_TO_SEC(NOW())<0
                /* то уменьшаем на один количество дней */
                THEN DATEDIFF(dbt.t.b, NOW())-1
        END AS DAYS,
        CASE
            /* Если дата в прошлом */
            WHEN UNIX_TIMESTAMP(dbt.t.b)-UNIX_TIMESTAMP(NOW())<0
                /* и время суток позднее текущего  */
                AND TIME_TO_SEC(dbt.t.b) - TIME_TO_SEC(NOW())>0
                THEN SEC_TO_TIME(
                    TIME_TO_SEC('24:00:00')-TIME_TO_SEC(dbt.t.b)+TIME_TO_SEC(NOW())
                )
            /* Если дата в прошлом */
            WHEN UNIX_TIMESTAMP(dbt.t.b)-UNIX_TIMESTAMP(NOW())<0
                /* и время суток ранее текущего */
                AND TIME_TO_SEC(dbt.t.b) - TIME_TO_SEC(NOW())<0
                THEN SEC_TO_TIME(
                    TIME_TO_SEC(NOW())-TIME_TO_SEC(dbt.t.b)
                )
            /* Если дата в будущем */
            WHEN UNIX_TIMESTAMP(dbt.t.b)-UNIX_TIMESTAMP(NOW())>0
                /* и время суток позднее текущего */
                AND TIME_TO_SEC(dbt.t.b) - TIME_TO_SEC(NOW())>0
                THEN SEC_TO_TIME(
                    TIME_TO_SEC(dbt.t.b)-TIME_TO_SEC(NOW())
                )
            /* Если дата в будущем */
            WHEN UNIX_TIMESTAMP(dbt.t.b)-UNIX_TIMESTAMP(NOW())>0
                /* и время суток ранее текущего */
                AND TIME_TO_SEC(dbt.t.b) - TIME_TO_SEC(NOW())<0
                THEN SEC_TO_TIME(
                    TIME_TO_SEC('24:00:00')+TIME_TO_SEC(dbt.t.b)-TIME_TO_SEC(NOW())
                )
        END AS HOURS,
        CASE
            /* Если дата в будущем */
            WHEN UNIX_TIMESTAMP(dbt.t.b)-UNIX_TIMESTAMP(NOW())>0
                THEN 'До запуска осталось'
                ELSE 'После запуска прошло'
        END AS MESSAGE,
        NOW() AS "FROM", 
        dbt.t.b AS TILL
    FROM
        dbt.t
)   AS S

Вернет следующие данные:
user posted image
Колонки FROM и TILL отладочные и предназначены для того, что бы можно было проверить правильность выполнения запроса.
db Forge Studio for MySQL отказалась у меня принимать имена таблиц и столбцов без указания БД... Не знаю это особенность СУБД или среды разработки...
P.S. Результаты проверял бегло, поэтому рекомендую повнимательнее пересчитать  smile ...


--------------------
Слава Україні!
PM MAIL   Вверх
sTa1kEr
Дата 24.9.2009, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Код

SELECT
    @ts:=TIMESTAMP(DATE('2010-01-01 00:00:00'), TIMEDIFF(TIME('2010-01-01 00:00:00'), CURTIME())) AS ts,
    DATEDIFF(@ts, NOW()) AS `days`, 
    TIMEDIFF(TIME(@ts), '00:00:00') AS `times`;


Или

Код

SELECT
    @ts:=TIMESTAMP(DATE('2010-01-01 00:00:00'), TIMEDIFF(TIME('2010-01-01 00:00:00'), CURTIME())) AS ts,
    @td:=TIMEDIFF(TIME(@ts), '00:00:00') AS td,
    DATEDIFF(@ts, NOW()) AS `days`, 
    HOUR(@td) as `hours`,
    MINUTE(@td) as `minutes`,
    SECOND(@td) as `seconds`;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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