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

    +164.4

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    function personGetAge($birthday) {
    	$m = intval(substr($birthday, 5, 2));
    	$d = intval(substr($birthday, 8, 2));
    	$y = intval(substr($birthday, 0, 4));
    
    	$age = time() - mktime(12, 0, 0, $m, $d, $y);
    
    	return floor($age / (60*60*24*365.2425));
    }

    А какая глубокая идея...)))

    Запостил: dmarco, 22 Декабря 2009

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

    • Ага. Люди, родившиеся раньше 1970 слишком стары, чтоб ходить по этим вашим интернетам :)
      Ответить
    • И еще, кажется на этом сайте, показывал, что около дня рождения возможны погрешности с определением возраста
      Ответить
      • по логике автора, все родились в 12:00:00, так что флуктуации будут вокруг 12, +/- 3 часа. Не существенно
        Ответить
        • Не существенно было бы, если брал хотя бы начало суток, а не time(). А то до 11 мне 5 лет, а после 11 уже 6.
          <?
          
          $b = mktime(12, 0, 0, 12, 20, 1980);
          
          for ($y=2000; $y<=2009; $y++) {
          	$now = mktime(11, 0, 0, 12, 20, $y);
          	$age = $now - $b;
          	print floor($age / (60*60*24*365.2425))."\n";
          }
          ?>


          А определение возраста решается более элегантным способом
          Ответить
          • ну кстати, можно было бы делать не floor(...) а round(...,1), тогда бы "плавнее" был переход.

            > А определение возраста решается более элегантным способом
            Наиболее оптимальным мне видится получение разности текущего года и года рождения и определение, был ли уже в этом году ДР. Я прав?
            Ответить
            • Да.
              Если дата в формате yyyy-mm-dd, то
              substr($now, 0, 4)-substr($b, 0, 4) - (substr($now, 5)<substr($b, 5))
              Ответить
              • а дни кто сравнивать будет )
                Ответить
              • а, чорт, понял :) ты сравниваешь остатки мм-дд как строки. Изв
                Ответить

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