1. PHP / Говнокод #10401

    +67

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    preg_match('/(\d+)-(\d+)-(\d+)/i', date('d-m-Y'), $match);
    ob_start();
    echo (($match[1] == 30 || $match[1] == 31)?'01':(($match[2] <= 10)?'0':'').''.(++$match[1])).'.'; 
    echo ((!$match[2][1])?'0':''); 
    echo (($match[1] == 30 || $match[1] == 31)?++$match[2]:$match[2]); 
    echo '.'.$match[3];
    $rdate = ob_get_contents();
    ob_end_clean();

    Досталось в наследство...
    По алгоритму $rdate должна содержать текущее число следующего месяца в формате date('d.m.Y'). Мало того, что способ означивания переменной чрезвычайно необычен, код оформлен безобразно, так оно еще и не работает!
    На 29.05.2012 выдает "030.6.2012"

    Запостил: domaster, 29 Мая 2012

    Комментарии (13) RSS

    • > текущее число следующего месяца
      Что-то я вас не понял...
      Ответить
      • 29.05.2012 $rdate должна была получить значение "29.06.2012"
        Ответить
        • Тогда я отказываюсь верить, что это мог написать психически здравый человек.
          Ответить
        • $rdate = date("d-m-Y", strtotime("1 month"));
          Ответить
          • 1) Не "+1 month"?
            2) Как я понимаю, тупо приплюсует календарный месяц (проверять лень). А тут нужно инкрементнуть номер месяца.
            Ответить
            • 2) ... - а это не одно и то же?
              Ответить
            • Это прекрасно выполняется, работает корректно и решает задачу, описанную автором ГК.
              "1 month" и "+1 month" в данном случае равносильны.
              В любом случае, если тупо инкрементить номер месяца, то в один прекрасный момент получится 01.13.2012, что не совсем правильно.
              Ответить
            • Опять же, не поверял и проверять лень, если плюсует ровно до следующей даты, тогда всё в порядке, возражения снимаются. А то хрен знает, как там в этом пхп функции с датами работают.
              Ответить
              • Я сам эту конструкцию нагуглил и адаптировал. В доках почитал немного, вроде - то, что надо.
                По крайней мере на локалке тестанул - работает.
                Ответить
                • Весь этот код меняется на одну строчку
                  $rdate = date('d.m.Y', strtotime('+1 month'));

                  Забыл добавить в первоначальный комментарий.
                  Ответить
                • Согласен, что-то меня внезапно потянуло на велосипеды. Минусую свой коммент.
                  Немного смутило это "текущее число следующего месяца". Для 31 марта нет 31 апреля.
                  Ответить
                  • С этими вещами php в данном случае работает стабильно. (с особой, пхп-шной стабильностью :)
                    Ответить
    • .
      Ответить

    Добавить комментарий