За последние 24 часа нас посетили 17687 программистов и 1709 роботов. Сейчас ищут 1743 программиста ...

Сравнение дат

Тема в разделе "PHP для новичков", создана пользователем HAMANN, 7 ноя 2010.

  1. HAMANN

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

    С нами с:
    25 июл 2009
    Сообщения:
    24
    Симпатии:
    0
    Есть таблица, где даты хранятся в строковом формате вида 11-11-2010.

    Мне нужно в цикле сравнить сегодняшнюю дату и даты в столбце, после - если они идентичны - вывести сообщение, этих значений может быть больше 1.

    Вопрос: В каком формате лучше всего хранить данные с Датой? (Чтобы потом они выводились в таблице в виде 11-11-2010 (сразу говорю, что это не дата СЕГОДНЯ, а вводится пользователем произвольно и естественно немаловажно, чтобы с ней было удобно работать и производить вычисления).

    И каким способом наиболее оптимально проверять их на идентичность?

    Мое решение пока такое:

    PHP:
    1.  
    2. <?php
    3. $today = "07-11-2010";
    4.  
    5. // приводим дату СЕГОДНЯ к формату 07-11-2010
    6. $now = getdate ();
    7. $datenow = "{$now['mday']}-{$now['mon']}-{$now['year']}"; //7-11-2010
    8.  
    9. if ($today = $datenow) echo "Даты идентичны"; ?>
    Подскажите как оптимальнее и правильнее решить данную задачу.
     
  2. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    я делал "обратное" вашему проверяя не склеенную сегодняшнюю дату , а разрезая введённую потому что неизвестно когда вам понадобятся каждое число отдельно - например возможно вам нужно будет узнать какой это день недели или посчитать ту же разницу между 2 датами - в вашем варианте прийдётся разрезать или переписывать определённую часть , а в моём просто ввести даты в mktime и делать что пожелаю без лишних действий
     
  3. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    либо в int - timestamp, либо date просто
    с таймстампом легче считать, если секунды и минуты к примеру надо вычислить.
    date - без заморочек и "человеко" понятный формат.
    любой из двух приемлем.
     
  4. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    unix timestamp

    PHP:
    1.  
    2. <?php
    3. $userDate = strtotime ('07.11.2010');
    4. $databaseDate = strtotime ('06.11.2010');
    5.  
    6. if ($userDate == $databaseDate) { ... }
    7.  
    8. echo date ('d-m-Y', $userDate);
    9.  
     
  5. HAMANN

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

    С нами с:
    25 июл 2009
    Сообщения:
    24
    Симпатии:
    0
    Спасибо за ответы. Понял, что нужно использовать только UNIX timestamp для работы с датами.

    Вот привожу код

    PHP:
    1.  
    2. <?php
    3. $databaseDate = '07-11-2010';
    4. $baseDate = strtotime($databaseDate);  // именно в таком виде будет храниться дата в дополнительном столбце БД, создается при вводе из формы
    5.  
    6. $todayDate =  mktime(0, 0, 0, date("m"), date("d"), date("Y"));  // привожу текущую дату к timestamp
    7. if ($todayDate == $baseDate)  { echo 'Даты идентичны';}
    8. ?>
    9.  
    Может есть еще какие-то замечания? Правильно ли я привожу текущую дату к timestamp?
     
  6. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
  7. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    вместо $todayDate = mktime(0, 0, 0, date("m"), date("d"), date("Y")); // привожу текущую дату к timestamp
    можно
    $todayDate = strtotime('midnight');
     
  8. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Неправильно. Текущая дата -- http://php.net/time

    $Time = time();
     
  9. HAMANN

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

    С нами с:
    25 июл 2009
    Сообщения:
    24
    Симпатии:
    0
    time() - Возвращает количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970, 00:00:00 GMT) до текущего времени.

    А вопрос состоит чтобы идентичны были даты, а не время в секундах. Получится, что эти две даты будут совпадать только одну секунду.

    Т.е. наступил новый день - если это день X - то происходит СОБЫТИЕ.

    Спасибо, попробую
     
  10. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    вы неправильно поняли вопрос

    вопрос был
    где в коде написан комментарий
    PHP:
    1. <?
    2. $todayDate =  mktime(0, 0, 0, date("m"), date("d"), date("Y"));  // привожу текущую дату к timestamp
    3. ?>
    по факту - работает , значит правильно
    iliavlad сказал как можно сделать эффективней
    думаю автор и так знает ф-цию time() и не задавал бы такой вопрос ;)