За последние 24 часа нас посетили 22400 программистов и 1654 робота. Сейчас ищут 1199 программистов ...

[ALERT!]Как узнать когого числа будет ближайший понедельник?

Тема в разделе "Прочие вопросы по PHP", создана пользователем dark991, 23 июл 2009.

  1. dark991

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

    С нами с:
    23 апр 2006
    Сообщения:
    27
    Симпатии:
    0
    Адрес:
    Москва
    ситуация: человек в списке выбирает любой из 7 дней недели.
    задача: отобразить дату с помощью php, какого числа/месяца/года будет ближайший выбранный пользователем день недели

    помогите пожалуйста, очень срочно надо :) сроки поджимают :( заранее благодарен :)
     
  2. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Проще некуда:

    PHP:
    1. <?
    2.  
    3. // Получаем дату
    4. list($day, $date, $month) = explode('-', date("N-d-m"));
    5.  
    6. // Вычисляем ближайший понедельник
    7. echo "Ближайший понедельник будет " . ((8 - $day) + sprintf("%d", $date)) . ".{$month}";
    8.  
    9. ?>
    Форматирование с помощью sprintf можно опустить.
    Мы это делаем, поскольку пока содержится строка 0х — ничего страшного, иначе РНР будет принимать число как восьмеричное.
    В данном примере можно опустить эту функцию, но в познавательных целях я её специально написал.
     
  3. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Алгоритм вычислений предельно просто:
    В неделе всего семь дней, соответственно мы получаем текущий день недели (среда = 3) и используем его для вычисления, когда снова будет первый день (понедельник = 1).
    Поскольку в неделе 7 дней, при вычислении 7 - 7 мы получим ноль, что недопустимо для нас (дня "ноледельник" у нас нет).
    Отсюда взята восьмерка.
    После того, как мы узнали, сколько дней осталось до понедельника, мы получаем сегодняшнее число, к которому прибавляем нужное нам количество дней.

    Вроде всё, всё очень просто.
     
  4. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  5. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    ;)
     
  6. dark991

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

    С нами с:
    23 апр 2006
    Сообщения:
    27
    Симпатии:
    0
    Адрес:
    Москва
    2Sergey89, Apple
    спасибо!!1
    :lol: :lol: вчера целый день кодил, мозгов уже не осталось ))
    тему off

    Можно еще проще :idea: :lol:
    PHP:
    1.  
    2. <?
    3. echo "© [url=http://www.php.su/functions/?strtotime]http://www.php.su/functions/?strtotime[/url]";
    4. echo strtotime("now"), "\n";
    5. echo strtotime("10 September 2000"), "\n";
    6. echo strtotime("+1 day"), "\n";
    7. echo strtotime("+1 week"), "\n";
    8. echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
    9.  
    10. // Следующий понедельник - вот что мне нужно
    11. echo strtotime("next Monday"), "\n";
    12. // Приминение:
    13. echo date ("r", strtotime("next Monday"));
    14. // Предыдущий понедельник
    15. echo strtotime("last Monday"), "\n";
    16. ?>
    17.  
     
  7. Elkaz

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

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Sergey89
    Любитель изящных решений :)
     
  8. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Я сторонник вычислительных решений, ведь это, всё-таки, программирование.
    Привычку заложил С++ и её уже никуда не деть.
     
  9. neverlose

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

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    ) только в алгоритме Apple'а число может получиться больше 31 и месяц не изменится.
    Вычесления хороши тогда, когда они работают быстрее встроенных в php функций.
     
  10. kostyl

    kostyl Guest

    это называется "профессионал" ;)
     
  11. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    это называется любитель читать мануалы :)
     
  12. Elkaz

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

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Когда это оправдано — целиком и полностью «за»!