"PHP" / Говнокод #25838 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
<?

function russian_date($input) {
    $date=explode("-", date("Y-m-d",strtotime($input)));
    switch ($date[1]) {
        case 1: $m='ЯНВАРЬ'; break;
        case 3: $m='МАРТ'; break;
        case 4: $m='АПРЕЛЬ'; break;
        case 5: $m='МАЙ'; break;
        case 6: $m='ИЮНЬ'; break;
        case 2: $m='ФЕВРАЛЬ'; break;
        case 7: $m='ИЮЛЬ'; break;
        case 8: $m='АВГУСТ'; break;
        case 9: $m='СЕНТЯБРЬ'; break;
        case 10: $m='ОКТЯБРЬ'; break;
        case 11: $m='НОЯБРЬ'; break;
        case 12: $m='ДЕКАБРЬ'; break;
    }
    echo ($m.' '.$date[0]);
}

?>

Образцовый код из одного мегапроекта от профессионалов.
Такие монстры рождаются, когда не знаешь о локали.

Запостил: petja petja, (Updated )

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

  • Перевел на недолисп функциональный js
    const matched = x => ({
      on: () => matched(x),
      otherwise: () => x,
    })
    const match = x => ({  
      on: (pred, fn) => (pred(x) ? matched(fn(x)) : match(x)),
      otherwise: fn => fn(x),
    })
    const russian_date = input =>  {
      const date = new Date(input).toISOString().split('-')
      const m = match(date[1])
        .on(d => d == 1, () => 'ЯНВАРЬ')
        .on(d => d == 3, () => 'МАРТ')
        .on(d => d == 4, () => 'АПРЕЛЬ')
        .on(d => d == 5, () => 'МАЙ')
        .on(d => d == 6, () => 'ИЮНЬ')
        .on(d => d == 2, () => 'ФЕВРАЛЬ')
        .on(d => d == 7, () => 'ИЮЛЬ')
        .on(d => d == 8, () => 'АВГУСТ')
        .on(d => d == 9, () => 'СЕНТЯБРЬ')
        .on(d => d == 10, () => 'ОКТЯБРЬ')
        .on(d => d == 11, () => 'НОЯБРЬ')
        .on(d => d == 12, () => 'ДЕКАБРЬ')
      console.log(`${m} ${date[0]}`)
    }
    Ответить
    • <?php
      
      class Match {
          private $data = 0;
          public function __toString() {
              return $this->data;
          }
          public function __construct($value) {
              $this->data = $value;
          }
          public function on($condition, $action) {
              return $condition($this->data) ? new Matched($action($this->data)) : $this;
          }
      }
      
      class Matched {
          private $data = 0;
          public function __toString() {
              return $this->data;
          }
          public function __construct($value) {
              $this->data = $value;
          }
          public function on($condition, $action) {
              return $this;
          }
      }
      
      $m = (new Match(2))
      -> on(function($d){return $d == 1;}, function(){return 'Январь';})
      -> on(function($d){return $d == 2;}, function(){return 'Февраль';})
      -> on(function($d){return $d == 3;}, function(){return 'Март';});
      
      echo $m;
      Ответить
      • Какая вербозность )))

        Именно поэтому
        months =. ' ' cut 'ЯНВАРЬ ФЕВРАЛЬ МАРТ АПРЕЛЬ МАЙ ИЮНЬ ИЮЛЬ АВГУСТ СЕНТЯБРЬ ОКТЯБРЬ НОЯБРЬ ДЕКАБРЬ'
           russian_date =: ({::&months@<:@{~&1 , ' ' , ":@{~&0) @ getdate
        
        
           russian_date '14/09/2019'
        СЕНТЯБРЬ 2019
           russian_date '2019-09-14'
        СЕНТЯБРЬ 2019
           russian_date 'September 14, 2019'
        СЕНТЯБРЬ 2019
        Ответить
        • Думал, как написать на «PHP» без лишних переменных. Получается длинная питушня. В итоге всё-таки ввёл временную переменную:
          <?php
          define('MONTHS', 'ЯНВАРЬ ФЕВРАЛЬ МАРТ АПРЕЛЬ МАЙ ИЮНЬ ИЮЛЬ АВГУСТ СЕНТЯБРЬ ОКТЯБРЬ НОЯБРЬ ДЕКАБРЬ');
          function russian_date($x) {
              $tmp = explode(' ', @date('m Y',@strtotime($x)));
              return explode(' ', MONTHS)[$tmp[0]-1] . ' ' . $tmp[1];
          }
          
          echo russian_date('2019-09-03');
          Ответить
          • Вот примерный перевод, за исключением того, что в 'J' date(explode(...)) не нужен, getdate возвращает сразу массив Y m d
            <?php
            define('MONTHS', explode(' ', 'ЯНВАРЬ ФЕВРАЛЬ МАРТ АПРЕЛЬ МАЙ ИЮНЬ ИЮЛЬ АВГУСТ СЕНТЯБРЬ ОКТЯБРЬ НОЯБРЬ ДЕКАБРЬ'));
            function russian_date($x) {
                return (function($y){return MONTHS[$y[1]-1] . ' ' . $y[0];})(explode(' ', date('Y m d', strtotime($x))));
            }
            ?>
            <?=russian_date('2019-09-03');?>
            Ответить
            • Какой-то хуёвый у тебя ник. Пиши лучше с другого.
              Ответить
              • Не могу, я поехал на этой песне и решил не логинится под другим ником пока она мне не надоест.

                Аааа! Этот голос в конце не выходит из головы

                пи-уай-ти
                уай-ти, уай-ти
                ти-эл-си
                эл-си, эл-си
                Ответить
                • Послушал. Хуйня.

                  Лучше скажи могу ли я получить загранпаспорт?
                  Ответить
                  • Нет, за границу пускают только благочестивых и красивых законопослушных граждан, а ты лысый сутулый дрищ с кривыми зубами и воруешь в супермаркете.
                    Ответить
                  • кууик
                    нет, не можешь, пока тебя судимость за изнасилование крупного рогатого скота не снимут

                    кууу
                    Ответить
  • А день почему не выводится?

    Странный порядок, автор когда писал забыл какой месяц второй, а когда дошел до июля вспомнил?
    Ответить
      • Внезапно: monkey device (горное дело) — стационарный ловитель (вагонеток) кулачного типа.
        Ответить
        • Хуеловитель.

          Февраль
          Куда-то к черту убежал.

          case 0: $m='НУЛЯБРЬ'; break
          Ответить
    • Оптимизация. Месяцы отсортированы по убыванию частоты появления в данном проекте. Значит, февральские даты реже июньских появлялись.
      Ответить
      • Мне очень нравится, что ты грамотный. Когда я вижу таких человеков, я от благоговения готов бить земные поклоны.
        Ответить

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

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8