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

    +167.6

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    <?php
    function daybefore($j){
    $day = date('d');
    $month = date('m');
    $year = date('Y');
    for ($i=0; $i<$j; $i++) { 
    if ($day==1) {
        if ($month == 1) {
            $day = 31;
            $month = 12;
            $year = $year - 1;
        } else {
            $month = $month - 1; 
            switch ($month) {
                case 01:
                    $maxdays=31;
                    break;
                case 02:
                    $a = $year / 4;
                    $b = ceil($a);
                    if ($a==$b){                
                         $maxdays=29;
                    } else {
                          $maxdays=28;
                    }
                    break;
                case 03:
                    $maxdays=31;
                    break;
                case 04:
                    $maxdays=30;
                    break;
                case 05:
                    $maxdays=31;
                    break;
                case 06:
                    $maxdays=30;
                    break;
                case 07:
                    $maxdays=31;
                    break;
                case 08:
                    $maxdays=31;
                    break;
                case 09:
                    $maxdays=30;
                    break;
                case 10:
                    $maxdays=31;
                    break;
                case 11:
                    $maxdays=30;
                    break;
                case 12:
                    $maxdays=31;
                    break;
            }
            $day = $maxdays;
            $year = $year;
        }
    } else {
        $day = $day - 1;
        $month = $month;
        $year = $year;
    }}
    return "$year-$month-$day";
    }
    echo daybefore(3);
    ?>

    Отсюда:
    http://php.net/manual/en/function.date.php

    Запостил: hdkeeper, 17 Марта 2010

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

    • И доверяй после этого примерам с оф.сайта >(
      Ответить
    • Прорекаю пользу от
      $maxdays = 29 - ( bool ) ( $year % 4 );
      Вместо деления, округления, сравнения. При желании допиливается под дополнительное условие (делится на 400, не делится на 100).
      Ответить
    • еще одно date()-related помешательство
      Ответить
    • Ужос нах...
      Ответить
    • Функция вычитывает что?
      Вчерашний день?
      Тогда не легче date('d',strtodate('yestarday'));
      Ответить
      • Вычитает $j дней из сегодняшней даты
        Ответить
        • Так есть же в date() заполнитель для этих целей.
          Ответить
          • Разве? Просветите, а то не встречал
            Ответить
    • И что мешаеть использовать Unix-формат даты??? С ним же намного проще работать. И вчерашний день высчитать как
      $yesterday = date('U', mktime(false,false,false, date('d'), date('m'), date('Y')) - (60*60*24);
      Ответить

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