За последние 24 часа нас посетил 19221 программист и 1644 робота. Сейчас ищут 872 программиста ...

Форматирование вывода даты, проблемы

Тема в разделе "PHP для новичков", создана пользователем Netopyr, 24 дек 2016.

  1. Netopyr

    Netopyr Новичок

    С нами с:
    24 дек 2016
    Сообщения:
    15
    Симпатии:
    0
    Добрый день, столкнулся с проблемой. Нужно вывести цикл дат на экран, взятые из формы. При стандартном формате Y-m-d проблем нет, считает все как надо, однако когда разворачиваю в формат dmY - считает только дни. К примеру 01.01.16 и 05.02.16 - выведет 5 дат до 05.01.16. В чем моя ошибка?
    PHP:
    1. <?php
    2. if (isset($_POST['maindate1'])) {
    3.     $maindate1 = $_POST['maindate1'];
    4. }
    5. $date_begin = date('d.m.Y', strtotime($maindate1));
    6.  
    7. if (isset($_POST['maindate2'])) {
    8.     $maindate2 = $_POST['maindate2'];
    9. }
    10. $date_end = date('d.m.Y', strtotime($maindate2));
    11.  
    12. $date = $date_begin;
    13. while ($date <= $date_end) {
    14.     echo $date . "</br>";
    15.     $date = date('d.m.Y', strtotime($date . '+1 days'));
    16. }
    17. ?>
     
    #1 Netopyr, 24 дек 2016
    Последнее редактирование модератором: 24 дек 2016
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    потому что ты работаешь со строками. функция date() возвращает строку! сравнение строк работает так — посимвольно.

    советую сравнивать даты в виде "отметки времени" другими словами unix timestamp. это целое число. бОльшая дата это бОльшее число.

    https://php.ru/forum/threads/rabota-s-datoj-v-mysql-php-zagotovka-faq.50838/

    (в самом крайнем случае ты можешь работать с грубым хаком, оставляя дату в формате ГГГГ-ММ-ДД, при таком раскладе посимвольное сравнение даст тот же результат, что и сравнение истинных дат, т.к. более значимые цифры стоят раньше.)
     
    Netopyr нравится это.
  3. Netopyr

    Netopyr Новичок

    С нами с:
    24 дек 2016
    Сообщения:
    15
    Симпатии:
    0
    Код (Text):
    1. <?php
    2. if (isset($_POST['maindate1'])) {
    3.     $maindate1 = $_POST['maindate1'];
    4. }
    5. $date_begin = strtotime($maindate1);
    6.  
    7. if (isset($_POST['maindate2'])) {
    8.     $maindate2 = $_POST['maindate2'];
    9. }
    10. $date_end = strtotime($maindate2);
    11.  
    12. $date = $date_begin;
    13. while ($date <= $date_end) {
    14.     echo date('d.m.Y', $date) . "</br>";
    15.     $date = strtotime('+1day', $date);
    16. }
    17. ?>
    Спасибо большое, разобрался! Я на верном направлении? Небольшой вопрос, а как лучше использовать плюс в цикле, строкой strtotime('+1day', $date) или $date+86400?
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    зависит от желаемого результата. если в выбранном часовом поясе нет перехода на летнее время, то результат одинаковый.
    --- Добавлено ---
    P.S. избавься от привычки ставить ?> в конце каждого php скрипта. в старых учебниках так писали, а сейчас это признано вредной практикой, т.к. ты не видишь есть ли за этим ?> пустая строка (которая будет выведена!)
     
    denis01 и MouseZver нравится это.