Помощник
|
Расчет сколько лет, зная дату рождения, ищу функцию |
sc2r2bey
|
Сообщение
#1
|
||
|
|
||
|
|||
yury_mw |
20.2.2010, 15:57;
Ответить: yury_mw
Сообщение
#2
|
|
сабж... sc2r2bey, примерно, так: [php]<html> <body> <?php function age($birth_date) { $birth_time = strtotime($birth_date); $birth = getdate($birth_time); $now = getdate(); $age = $now['year'] - $birth['year']; if($now['mon'] < $birth['mon']) $age--; if($now['mon'] === $birth['mon']) if($now['mday'] < $birth['mday']) $age--; return $age; } //выводит строку "год"/"года"/"лет" в зависимости от числового значения возраста, например: "22 года" или "45 лет" function s_years($age) { $age = abs($age); $t1 = $age % 10; $t2 = $age % 100; $a_str = ""; if ($t1 == 1) $a_str = "год"; else if (($t1 >= 2) && ($t1 <= 4)) $a_str = "года"; if (($t1 >= 5) && ($t1 <= 9) || ($t1 == 0) || ($t2 >= 11) && ($t2 <= 19)) $a_str = "лет"; return $a_str; } $s_bdate = "14.12.1901"; echo "Если дата рождения $s_bdate, то возраст " . age($s_bdate) . " " . s_years(age($s_bdate)) . "<br>"; $s_bdate = "14.12.1957"; echo "Если дата рождения $s_bdate, то возраст " . age($s_bdate) . " " . s_years(age($s_bdate)) . "<br>"; $s_bdate = "19.02.2010"; echo "Если дата рождения $s_bdate, то возраст " . age($s_bdate) . " " . s_years(age($s_bdate)) . "<br>"; $s_bdate = "20.02.2010"; echo "Если дата рождения $s_bdate, то возраст " . age($s_bdate) . " " . s_years(age($s_bdate)) . "<br>"; $s_bdate = "11.11.1993"; echo "Если дата рождения $s_bdate, то возраст " . age($s_bdate) . " " . s_years(age($s_bdate)) . "<br>"; ?> </body> </html>[/php] Примечание: у этого "вычислятора" возраста есть ограничение по датам рождения: 14.12.1901 - 19.01.2038. Есть подозрение, что при выходе за этот диапазон накрывается счетчик, отсчитывающий секунды от 1970 года. (http://www.php.su/functions/?date): Для большинства систем допустимыми являются даты с 13 декабря 1901, 20:45:54 GMT по 19 января 2038, 03:14:07 GMT. (Эти даты соответствуют минимальному и максимальному значению 32-битового целого со знаком). Для Windows допустимы даты с 01-01-1970 по 19-01-2038. |
|
|
yury_mw |
20.2.2010, 16:46;
Ответить: yury_mw
Сообщение
#3
|
|
Исправленный вариант (без ограничений на диапазон дат рождения):
[php]<html> <body> <?php function age($birth_date) { $birth = split ('[/.-]', $birth_date); $now = getdate(); $age = $now['year'] - $birth[2]; if($now['mon'] < $birth[1]) $age--; if($now['mon'] == $birth[1]) if($now['mday'] < $birth[0]) $age--; return $age; } //выводит строку "год"/"года"/"лет" в зависимости от числового значения возраста, например: "22 года" или "45 лет" function s_years($age) { $age = abs($age); $t1 = $age % 10; $t2 = $age % 100; return ($t1 == 1 && $t2 != 11 ? "год" : ($t1 >= 2 && $t1 <= 4 && ($t2 < 10 || $t2 >= 20) ? "года" : "лет")); } $s_bdate = "25.08.1530"; $age = age($s_bdate); echo "Если бы Иван Грозный, родившийся $s_bdate, не умер, то сейчас ему было бы $age " . s_years($age); $s_bdate = "26-08-1828"; $age = age($s_bdate); echo "<br>Лев Толстой родился $s_bdate. Это было $age " . s_years($age) . " назад."; $s_bdate = "13/11/1729"; $age = age($s_bdate); echo "<br>А. В. Суворов — великий русский полководец, не потерпевший ни одного поражения в своей военной карьере, родился $s_bdate. С тех пор прошло $age " . s_years($age); ?> </body> </html>[/php] |
|
|
eyexal |
20.2.2010, 16:56;
Ответить: eyexal
Сообщение
#4
|
|
[php]$birthday = "09.07.1988";
$birthday = explode('.',$birthday); if($birthday[1] >= date(m)) { if ($birthday[0] >= date(d)) { $years = date(Y) - $birthday[2]; } else { $years = date(Y) - $birthday[2]-1; } } else { $years = date(Y) - $birthday[2]-1; } echo $years;[/php] |
|
|
yury_mw |
20.2.2010, 17:45;
Ответить: yury_mw
Сообщение
#5
|
|
eyexal,
проверьте, у вас напутано. Например, если $birthday = "19.02.2010"; при текущей дате "20.02.2010" - у вас получится возраст "минус 1 год" |
|
|
eyexal |
20.2.2010, 19:05;
Ответить: eyexal
Сообщение
#6
|
|
Да скрипт несет только основу логики, если его применять то надо писать больше проверок !
|
|
|
sc2r2bey
|
Сообщение
#7
|
|
выдает ошибку Deprecated: Function split() is deprecated in Z:\home\demo\www\demo.php on line 7
-------------------- программирую web и для we |
|
|
ZiTosS |
14.3.2010, 1:04;
Ответить: ZiTosS
Сообщение
#8
|
|
sc2r2bey, пробел уберите, между именем функции и круглыми скобками.
|
|
|
yury_mw |
14.3.2010, 1:40;
Ответить: yury_mw
Сообщение
#9
|
|
|
[quote name='sc2r2bey' post='2618595']выдает ошибку Deprecated: Function split() is deprecated in Z:homedemowwwdemo.php on line 7[/quote]
sc2r2bey, вы, наверное, свежий Денвер с PHP 5.3 поставили? Короче, замените строку [php]$birth = split ('[/.-]', $birth_date);[/php] на [php]$birth = preg_split('/[.-/]/', $birth_date);[/php]и ошибки уйдут. А проблема связана с тем, что при переходе к PHP 5.3.x многие функции переведены в разряд устаревших (подлежащих удалению в будущем). В новой версии php их еще можно заставить работать настройками в файле php.ini, но с версии PHP 6 разработчики обещают убрать такие функции совсем. Подробности см, например, тут: http://php.su/php/?migration53 Следующие директивы php.ini будут отмечены как НЕИСПОЛЬЗУЕМЫЕ (DEPRECATED) в PHP 5.3 и удалены в PHP 6.0.0
|
|
|
||
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Сколько времени нужно для раскачки нового сайта? | 29 | metvekot | 7764 | 8.3.2024, 15:41 автор: malamut |
|
"Лежащий" домен - 10 лет. Продать? | 8 | Wolfhound | 2323 | 5.3.2024, 3:22 автор: Liudmila |
|
Накрутка ПФ сайта в Яндекс. Опыт более 2 лет Профессиональная Накрутка Позиций |
51 | EnotPF | 47711 | 27.8.2023, 3:11 автор: unixway |
|
Занимаюсь добычей качественного контента из Вебархива. Опыт уже более трех лет Предоставляю только качественный, читабельный контент. |
62 | kuz999 | 37864 | 27.7.2023, 13:55 автор: kuz999 |
|
Пишу статьи на русском – Опыт 10+ лет, от 100₽ за 1000 знаков | 9 | duoseo | 1693 | 28.6.2023, 10:08 автор: duoseo |
Текстовая версия | Сейчас: 19.3.2024, 16:21 |