[PHP] Массив дат

Discussion in 'PHP' started by Redfern89, 5 Sep 2012.

  1. Redfern89

    Redfern89 New Member

    Joined:
    12 Jul 2012
    Messages:
    42
    Likes Received:
    1
    Reputations:
    -3
    Всем доброго времени суток! Есть вот такой фоарос

    на PHP есть массив дат, предположим такой:

    PHP:
    <?php
    $dates 
    = array("2012-05-31""2012-06-05"
        
    "2012-06-07""2012-06-12"); // Все даты идут на возростание

    $input_date strtotime("2012-06-10"); // Введенная дата
    ?>
    Значит вот такой вопрос. Есть переменная $input_date. Задача такова, что нужно найти ближайшую дату в массиве на убывание.
     
  2. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    Копай в сторону http://www.php.su/functions/?cat=datetime

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

    Как вариант можно сравнивать и текстовые поля (строки) (http://www.php.su/functions/?strcmp) но обламаемся если даты представлены в различных форматах, так что правильнее время привести к меткам в секундах от начала эпохи.
     
    #2 -=lebed=-, 5 Sep 2012
    Last edited: 5 Sep 2012
  3. Redfern89

    Redfern89 New Member

    Joined:
    12 Jul 2012
    Messages:
    42
    Likes Received:
    1
    Reputations:
    -3
    -=lebed=-, был я тут. К сожалению я не понимаю(( ведь если введенная дата не ровняеться текущей, тонадо вчесть 1 день из введенной, и опять сравнивать. Всетаки подскажите как правильно условие построить.
     
  4. Romashka_Sky

    Romashka_Sky New Member

    Joined:
    11 Jul 2011
    Messages:
    12
    Likes Received:
    1
    Reputations:
    0
    PHP:
     <?php 
    $dates 
    = array("2012-05-31""2012-06-05""2012-06-07""2012-06-12"); // Все даты идут на возростание  
    $input_date strtotime("2012-06-10"); // Введенная дата
    $result ""
    foreach (
    $dates as $date) {     
        if (
    strtotime($date) > $input_date)
            break;     
        
    $result $date;

    echo 
    $result
    ?> 
     
  5. Redfern89

    Redfern89 New Member

    Joined:
    12 Jul 2012
    Messages:
    42
    Likes Received:
    1
    Reputations:
    -3
    еще такой вопрос. А как к указанной дате прибавить месяц?

    upd. Разобрался сам)) вот код:

    PHP:

    function addDate($date$d$m$y)
    {
        
    $day date("d"$date);
        
    $month date("m"$date);
        
    $year date("Y"$date);
        
        
    $date_str mktime(000$month+$m$day+$d$year+$y);
        
    $result date('Y-m-d'$date_str);
        return 
    $result;
    }
     
    #5 Redfern89, 6 Sep 2012
    Last edited: 6 Sep 2012