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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Функция для расчёта возраста в PHP [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Простенький скриптик вполне удобный в эксплуатации для расчёт возраста.
donatello2005
Отправлено: 06 Сентября, 2011 - 22:04:47
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




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). Мысль в голове ещё не до конца сформировалась, поэтому продолжить её пока не могу. Завтра утром, наверное, мозг включится, и данное сообщение докомплектую доп.информацией и исправлю все допущенные выше ошибки, которых, думаю, измученный мозг допустил много.

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

(Отредактировано автором: 06 Сентября, 2011 - 22:29:43)

 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Пользовательские функции »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB