За последние 24 часа нас посетили 17628 программистов и 1281 робот. Сейчас ищет 1471 программист ...

Сравнить datetime

Тема в разделе "PHP и базы данных", создана пользователем IvanNoFF, 15 ноя 2006.

  1. IvanNoFF

    IvanNoFF Активный пользователь

    С нами с:
    15 ноя 2006
    Сообщения:
    30
    Симпатии:
    0
    Конкретно в MySQL хранится datetime. Мне нужно отсечь те DateTime, до которых осталось например менее получаса (варианты).

    Причем сравнение с учетом дня, месяца и года (Не хотелось бы, чтобы все рухнуло при смене месяца или года)

    если дадите функцию суммарного времени в секундах с учетом дня, месяца и года, буду тоже благодарен (остальное дело техники)

    Смысл в том, чтобы клиенты не могли отменить заказ, до выполнения которого осталось менее получаса
     
  2. Anonymous

    Anonymous Guest

    в PHP вам бы пригодилась mktime(), так как она умеет учитывать все смещения дат - т.е. например она знает что январь 2006 + 13 месяцев = февраль 2007....
     
  3. Mavir

    Mavir Guest

    Могут пригодиться функции MySQL - DATE_ADD(), DATE_SUB(), UNIX_TIMESTAMP()
     
  4. Mavir

    Mavir Guest

    Интесная штука. Делаю запрос
    Код (Text):
    1. SELECT UNIX_TIMESTAMP('1970-01-01 00:00:00');
    возращает 0. Логично.
    Второй запрос
    Код (Text):
    1. SELECT UNIX_TIMESTAMP('1970-01-02 00:00:00');
    возращает 79200.

    Проверьте кто-нибудь у себя эти запросы, может быть это только у меня глючит MySQL.
     
  5. Anonymous

    Anonymous Guest

    Mavir,
    = 64800.
    MySQL 4.1.16
     
  6. IvanNoFF

    IvanNoFF Активный пользователь

    С нами с:
    15 ноя 2006
    Сообщения:
    30
    Симпатии:
    0
    У меня 64800 выдает второй запрос
     
  7. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    Код (Text):
    1. SELECT id FROM table WHERE UNIX_TIMESTAMP(datetime_field)-1800<{$now}
    где
    id - перечень выбираемых полей
    datetime_field - имя поля datetime
    1800 - полчаса в секундах
    {$now} - текущее время в секундах определяется функцией php time(). Можно заменить на функцию sql NOW(), но лучше лишние вычисления вынести из запроса.[/code]
     
  8. Anonymous

    Anonymous Guest

    Mavir, а если
    Код (Text):
    1. SELECT FROM_UNIXTIME(UNIX_TIMESTAMP('1970-01-02 00:00:00'))
     
  9. Mavir

    Mavir Guest

    Тоже не правильно. Цифры те же, но переставлены местами :)
    В сутках 60*60*24 = 86400 секунд.

    У меня MySQL 5.0.22
     
  10. Mavir
    Рекомендую найти учебник по географии для 5 класса и узнать о существовании часовых поясов.

    А заодно запомни, что MySQL никогда не глючит. И если тебе вдруг так показалось, это значит, что это ты чего-то не знаешь.
     
  11. Anonymous

    Anonymous Guest

    Mavir,
    Код (Text):
    1. SELECT UNIX_TIMESTAMP( '1970-01-02 00:00:00' )
    + MySQL 5.0.24 = 75600 !
     
  12. Mavir

    Mavir Guest

    Не вижу связи.
    Ок. Выполни запросы
    Код (Text):
    1. SELECT UNIX_TIMESTAMP('1970-01-01 00:00:00');
    2. SELECT UNIX_TIMESTAMP('1970-01-01 00:01:00');
    У меня в обоих случаях выдает ноль.
     
  13. Anonymous

    Anonymous Guest

    Mavir,
    Код (Text):
    1. SELECT
    2. round((to_date('02011970','ddmmyyyy')-to_date('01011970','ddmmyyyy'))*24*60*60) as to_unix
    3. FROM DUAL
    + Oracle 7.3.2.0.0 = 86400 =)))))
     
  14. IvanNoFF

    IvanNoFF Активный пользователь

    С нами с:
    15 ноя 2006
    Сообщения:
    30
    Симпатии:
    0
    всем спасибо все работает
    UNIX_TIMESTAMP - рулит
     
  15. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва

    1. Чебурген прав.
    2. Если Чебурген не прав, смотри документацию к MySQL :)

    Часовые часы тут очень даже при чем: ибо вычисляется unix_timestamp с учетом текущего часового пояса. Для Москвы в зимнее время (-3GMT) 1 января 1970 года будет 75600 секунд. А 86400 - это для гринвича.

    0 для 1 января 1970 года показывается по одной-единственной причине: это поле не может быть отрицательно. (Иначе было бы -10800).
     
  16. под виндой.
    это особенность мускуля.
     
  17. Anonymous

    Anonymous Guest

    AlexGousev, отсюда мораль - ориентируйтесь на UTC ;)
     
  18. Mavir

    Mavir Guest

    Что UNIX_TIMESTAMP берет время по Гринвичу я знаю.
    Ладно, назовем это по другому, не глюк MySQL, а фича, что в первых сутках может быть меньше 24 часов :)
     
  19. просто фееричное по своей бессмысленности утверждение.
    вторая строчка полностью опровергает первую.
     
  20. Mavir

    Mavir Guest

    С чуством юмора UNIX_TIMESTAMP('1970-01-01 00:00:00') :)
     
  21. simpson

    simpson Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    +1