Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Функция для расчёта возраста в PHP [2]
Форумы портала PHP.SU » PHP » Пользовательские функции » Функция для расчёта возраста в PHP

Страниц (2): « 1 [2]
 

16. donatello2005 - 06 Сентября, 2011 - 22:04:47 - перейти к сообщению
Champion пишет:
(int) ((time() - mktime(0,0,0, $m, $d, $y)) / (60 * 60 * 24 * 365.25) думаешь сильно хуже?

Сорри, что поднимаю тему, но у меня встала та же проблема, что и у автора данной темы, а точнее - проблема при подсчёте возраста по дате рождения с учётом високосного года.

Идея про 365.25 дней в году очень понравилась. Но тут есть проблема, что при некоторых обстоятельствах (не могу их сформулировать, но сам факт того, что делим мы на 365.25 не зная, действительно ли 4 год с даты рождения был високосным, даёт сомнение в отсутствии погрешностей) данное решение может допускать погрешность в 1 сутки. Погрешность, конечно, мелочная, но привычка добиваться идеально правильного решения не даёт мне плюнуть на данную проблему.

Решение 1.
(придумал в тот момент, как только начала заниматься php, поэтому он самый простой)
PHP:
скопировать код в буфер обмена
  1. <?
  2. function age($day_rojd,$month_rojd,$year_rojd){
  3. $age=date("Y")-$year_rojd;
  4. if(date("d")<=$day_rojd && date("m")<=$month_rojd) { $age--; }
  5. return $age;
  6. }
  7. age("1","06","1950");
  8. ?>

Данное решение неприхотливо ни к чему. Основывается на логике обычного среднестатистического человека при подсчёте возраста, и именно поэтому не является приоритетным (хочется же показать, что php-программеры - это не "обычные среднестатистические", а мегакреативные).

Решение 2.
Я его даже реализовывать не буду, потому что оно основано на цикле, перебирающем года, прошедшие с момента рождения, и плюсующие количество дней основываясь на данных, полученных в date("L") для каждого отдельного года (определения, високосный ли год сейчас в цикле).

Решение 3.

А это решение я не могу привести не из лени, а из-за того, что мозг отключается после более суток беспрерывного кодинга (и данное обстоятельство крайне печально).
Основывается это решение на функции date("w") (определение дня недели) и вышеприведённом решении от Champion. Если быть точнее, то речь идёт об устранении это мелкой, с точки зрения восприятия, возможной погрешности в 1 день путём сравнения date("w") и date("w",$timestamp_rojdeniya). Мысль в голове ещё не до конца сформировалась, поэтому продолжить её пока не могу. Завтра утром, наверное, мозг включится, и данное сообщение докомплектую доп.информацией и исправлю все допущенные выше ошибки, которых, думаю, измученный мозг допустил много.

--
С уважением, ...

 

Powered by ExBB FM 1.0 RC1