Форумы портала PHP.SU » PHP » Пользовательские функции » Функция для расчёта возраста в PHP

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

1. Friendly Man - 21 Марта, 2010 - 14:42:56 - перейти к сообщению
Если Вам нужно расщитать возраст пользователя или ещё кого нибудь Вам сюда:
Жду комментариев, нарицаний и похвал Улыбка

PHP:
скопировать код в буфер обмена
  1.  
  2. //Функция для расчёта возраста 20.03.2010
  3. // Begin function
  4. function  age($day,$month,$year) {
  5.     if (is_integer($day) && is_integer($month) && is_integer($year)){
  6.         $month_age=date("m")-$month;
  7.         if($month_age < 0){
  8.           $year_age=(date("Y")-$year)-1;
  9.         }
  10.         elseif ($month_age == 0) {
  11.           $day_age=date("d")-$day;
  12.           if($day_age >= 0) {
  13.             $year_age=date("Y")-$year;  
  14.           }
  15.           else {$year_age=(date("Y")-$year)-1;}
  16.         }
  17.         else {$year_age=date("Y")-$year;}
  18.         $age=&$year_age;
  19.         return $age;
  20.     }
  21.     else {return $report="неверный формат данных.";}        
  22. }
  23. // End function
  24.  
2. Champion - 21 Марта, 2010 - 14:50:29 - перейти к сообщению
(int) ((time() - mktime(0,0,0, $m, $d, $y)) / (60 * 60 * 24 * 365.25) думаешь сильно хуже?
3. kochan10 - 21 Марта, 2010 - 14:52:13 - перейти к сообщению
классно))
вот бы она ещё и месяцы с днями считала;)
а так всё норм. автор-молодец.плюсанул бы))
4. Friendly Man - 21 Марта, 2010 - 14:52:18 - перейти к сообщению
Champion пишет:
(int) ((time() - mktime(0,0,0, $m, $d, $y)) / 365.25) думаешь сильно хуже?


А можешь прокомментировать?
5. kochan10 - 21 Марта, 2010 - 14:54:40 - перейти к сообщению
Champion пишет:
(int) ((time() - mktime(0,0,0, $m, $d, $y)) / 365.25) думаешь сильно хуже?


не очень работает. не правильно выдал
6. Friendly Man - 21 Марта, 2010 - 14:55:59 - перейти к сообщению
Friendly Man пишет:
Champion пишет:
(int) ((time() - mktime(0,0,0, $m, $d, $y)) / 365.25) думаешь сильно хуже?


А можешь прокомментировать?


Думаю это не сложно.
7. kochan10 - 21 Марта, 2010 - 14:57:43 - перейти к сообщению
Friendly Man пишет:
Champion пишет:
(int) ((time() - mktime(0,0,0, $m, $d, $y)) / 365.25) думаешь сильно хуже?


А можешь прокомментировать?


текущее время минус дата рождения делить на кол-во дней в году с учётом високосных. верно?
8. Champion - 21 Марта, 2010 - 14:59:27 - перейти к сообщению
Friendly Man пишет:
А можешь прокомментировать?
Я исправил. Поделить на всё остальное забыл.
time() - время (unixtime) в секундах, которое сейчас.
mktime(...) - время в секундах в дату рождения
Находим разницу в секундах, переводим в годы, отбрасываем дробную часть.
9. Friendly Man - 21 Марта, 2010 - 15:00:56 - перейти к сообщению
kochan10 пишет:
Friendly Man пишет:
Champion пишет:
(int) ((time() - mktime(0,0,0, $m, $d, $y)) / 365.25) думаешь сильно хуже?


А можешь прокомментировать?


текущее время минус дата рождения делить на кол-во дней в году с учётом високосных. верно?


Не совсем вижу смысл указания точного времени рождения. По причине нецелесообразностиУлыбка Зачем указывать время?
10. Champion - 21 Марта, 2010 - 15:04:10 - перейти к сообщению
Там нет точного времени: часы, минуты, секунды стоят по нулям. Но если очень хочется, можно их указать.
11. Friendly Man - 21 Марта, 2010 - 15:05:42 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. echo (int) ((time() - mktime(0,0,0, 05, 12, 1983)) / 365.25);
  3.  

выдал результат - 2335146 - где тут возраст?

Не хочу кидать камни в огород но у меня более всё конкретнее. Указал дату получил тупо возраст. Хотя скрипт предложенный Вами тоже не решён смысла. Надо просто довести до конца.
12. kochan10 - 21 Марта, 2010 - 15:06:56 - перейти к сообщению
в принципе классно)) одной строкой проще чем функцией. но всё равно функция тоже хорошо. молодец автор. а для чемпиона это раз плюнуть)))
(Добавление)
Friendly Man пишет:
PHP:
скопировать код в буфер обмена
  1.  
  2. echo (int) ((time() - mktime(0,0,0, 05, 12, 1983)) / 365.25);
  3.  

выдал результат - 2335146 - где тут возраст?


тебе же говорят, бери исправленную функцию. чемпион поправил её уже. гляди его пос первый
13. Friendly Man - 21 Марта, 2010 - 15:27:38 - перейти к сообщению
kochan10 пишет:
в принципе классно)) одной строкой проще чем функцией. но всё равно функция тоже хорошо. молодец автор. а для чемпиона это раз плюнуть)))
(Добавление)
Friendly Man пишет:
PHP:
скопировать код в буфер обмена
  1.  
  2. echo (int) ((time() - mktime(0,0,0, 05, 12, 1983)) / 365.25);
  3.  

выдал результат - 2335146 - где тут возраст?


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


(60 * 60 * 24 * 365.25) - а это что значит?
(Добавление)
Champion приятель попробуй в свой вариант вставить дату 1919 и посмотри на результат.
14. Champion - 21 Марта, 2010 - 16:01:15 - перейти к сообщению
Friendly Man пишет:
Champion приятель попробуй в свой вариант вставить дату 1919 и посмотри на результат.
Ну нормально всё) И 1903 нормально. Если тебе надо 1700й год, тогда mktime конечно вернет false, но на такие случаи одна строчка кода превратится в 3.
Friendly Man пишет:
(60 * 60 * 24 * 365.25)
секудны в год превращаются.
15. jfr - 21 Марта, 2010 - 18:31:44 - перейти к сообщению
вот таким образом тоже можно:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function age($day,$month,$year)
  3. {
  4. $current_day=date('d',time());
  5. $current_month=date('n',time());
  6. $current_year=date('Y',time());
  7.  
  8. if ($current_month>$month or $current_month==$month && $current_day>=$day)
  9. {$age=$current_year-$year;}
  10. else {$age=$current_year-$year-1;}
  11. echo $age;
  12. }
  13. age(26,08,1985);
  14. ?>

 

Powered by ExBB FM 1.0 RC1