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

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
  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
$sec_in_year = 31536000;
$sec_in_lyear = 31622400;
$sec_in_28 = 2419200;
$sec_in_29 = 2505600;
$sec_in_30 = 2592000;
$sec_in_31 = 2678400;
$sec_in_day = 86400;
$sec_in_hour = 3600;
$sec_in_min = 60;
$year_count = 1970;
$month_count = 0;
$day_count = 1;
$hour_count = 0;
$min_count = 0;
$lyear_count = 2;                                                // Make an array of seconds per month for ease of use.
$months = array(2678400, 2419200, 2678400, 2592000, 2678400, 2592000, 2678400, 2678400, 2592000, 2678400, 2592000, 2678400);
$lmonths = array(2678400, 2505600, 2678400, 2592000, 2678400, 2592000, 2678400, 2678400, 2592000, 2678400, 2592000, 2678400);
$month_list = array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec');

while($utime >= $sec_in_year) {                        // Count the year since 1970.
        if($lyear_count % 4 == 0) {
          $utime -= $sec_in_lyear;                // Compensate for leap years.
        }
        else {
          $utime -= $sec_in_year;
        }
        $year_count++;
        $lyear_count++;
}
while($utime >= $months[$month_count]) {        // Count the months since Jan.
        if($lyear_count % 4 == 0) {
                $utime -= $lmonths[$month_count];        // Compensate for leap year Feb.
        }
        else {
                $utime -= $months[$month_count];
        }
        $month_count++;
}

И еще куча строк кода.
Конвертим никсовый временной штамп, в читаемый для человека формат... aka date()

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

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

  • "Nothing is going to build your application for you, no matter what it promises. You are going to have to build it yourself" (c)

    достойные ученики лердорфа)
    Ответить
  • Нахрена константы заранее сосчитали, непонятно же теперь нихрена? Типа чтобы снизить нагрузку на интерпретатор?
    Ответить
    • да, пыховцы любят порассуждать, что константа быстрее переменной, а потом идут, и делают 42 запроса с louter join по varchar(255) на каждый заход на сайт)))
      Ответить
      • То есть вы исключаете вариант, что поле, по которому объединяются таблицы, может быть проиндексировано и тогда не имеет значение что в нём внутри, varchar или tinyint?
        Ответить
        • представьте себе сколько занимает индекс для tinyint и с какой скоростью он работает
          теперь тоже самое для varchar в UTF-8, например со словом "товары для дома"
          Ответить
          • я же не говорю что это хорошо 🙂 Но случаи когда можно использовать char или varchar небольшой длины всё же есть, в виде исключений 🙂
            Ответить
                • код языка явно будет лежать в отдельной таблице
                  что мешает связаться с ней по id?

                  хотя в целом ладно: если там действительно char(2), да еще однобайтовая кодировка -- то это не смертельно.

                  Вы еще пропустили шпильку про аутерджойн.
                  Невероятно, но некоторые не знают про внутренние джойны. Они знают только одну конструкцию, и называют ее "лефтджойн". И юзают везде, даже где не надо
                  Ответить
                  • Код языка может лежать в отдельной таблице, но во-первых зачем языку уникальный другой уникальный индекс, ведь один у него есть, во-вторых так нагляднее и не надо таскать лишнюю таблицу в каждом запросе, ведь из неё только код языка и нужен.
                    Естественно хранится как char(2), только вот кодировка особо значение не имеет, главное чтобы была _bin

                    А по поводу лефт-джоина в целом согласен, но иногда очень не хватает full outer, приходится извращаться
                    Ответить
                    • >> только вот кодировка особо значение не имеет
                      если unicode четырехбайтовый -- имеет)
                      Ответить
  • Ну стоит изменить проверку с
    if($lyear_count % 4 == 0)
    на
    if($lyear_count % 4 == 0 && ($lyear_count % 100 != 0 || $lyear_count % 400 == 0))

    А также добавить заранее просчитанный массивчик $seconds_in_days [year][month][day], чтобы еще учитывать даты перехода на летнее время и обратно, с 70го и на ближайшие лет 10 😀
    Ответить
    • "А также добавить заранее просчитанный массивчик $seconds_in_days [year][month][day]"

      Нет, не надо: два перевода часов в году компенсируют друг друга.
      Сначала у нас день на час короче (23 часа) (переход на летнее время), потом у нас день на час длиннее (25 часов) (переход на зимнее время).
      Ответить
      • да, но для правильного расчета надо, ибо время будет неправильным, а если оно в промежутке часа от 00:00, то и день 😉
        Ответить
            • для временной метки надо использовать время без перевода часов (время GMT), вы со мной согласны?
              Ответить
              • Для метки да, но при отображении надо показывать в нужном часовом поясе с поправкой на DST, вы со мной согласны?
                Ответить
              • куку, GMT страдает DST, поэтому от него уже давно отказались (а не потому что среднему программисту с пиндостанских равнин тяжело понять что такое Гринвич)
                Ответить
                • я имел в виду время GMT по 0 часовому поясу без переводов часов.
                  Ответить
                  • это называется всемирное время, в просторечии UTC
                    общеобразовательный курс астрономии как бы
                    Ответить
                    • UTC — это не GMT, это подправленное GMT.
                      ===
                      Но, грубо, UTC — это время GMT по нулевому часовому поясу без переводов часов.
                      Ответить

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

Из-за тебя ушел bormand, guest!

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


    8