|
|
|
| Как определить возраст если известна дата рождения?
Например - $birthday=1986-01-29;
Спасибо. | |
|
|
|
|
|
|
|
для: kis-kis
(20.01.2008 в 18:12)
| | Дата хранится в MySQL? Можно использовать средства MySQL или задача должна быть решена средствами PHP? | |
|
|
|
|
|
|
|
для: cheops
(20.01.2008 в 18:22)
| | Да, дата хранится в mysql, но при выводе помимо даты выводятся еще данные... | |
|
|
|
|
|
|
|
для: kis-kis
(20.01.2008 в 18:12)
| | вот например есть данные типа
год 1986
месяц 01
число 29
деаем так
<?php
$a=mktime(0,0,0,1,29,1986);
$b=time();
$c=$b-$a;
echo $c/(60*60*24*364)
?> | |
|
|
|
|
|
|
|
для: KVN
(20.01.2008 в 19:28)
| | давно у нас в году 364 дня?
P.S. на 365.25 тоже можете не пытаться делить - результат будет неверным. | |
|
|
|
|
|
|
|
для: kis-kis
(20.01.2008 в 18:12)
| | Может, как-нибудь так:
<?php
$bornAt = strtotime('1986-01-29');
$date = date('d', $bornAt);
$month = date('m', $bornAt);
$year = date('Y', $bornAt);
if (date('j') >= $date && date('n') >= $month) {
echo $age = (date('Y') - $year);
} else {
echo $age = (date('Y') - $year) - 1;
}
?>
| ? | |
|
|
|
|
|
|
|
для: Nemezis
(20.01.2008 в 22:15)
| | ну тогда смотреть сколько высокосных годов было и парцу условий ну смыл такой же | |
|
|
|
|
|
|
|
для: KVN
(21.01.2008 в 13:18)
| | Зачем?
Грубо говоря возраст считается так:
-2007
1986
=21
<?php
function getAge($birthDay) {
$bornAt = strtotime($birthDay);
$age = date('j') >= date('d', $bornAt) && date('n') >= date('m', $bornAt)
? date('Y') - date('Y', $bornAt)
: (date('Y') - date('Y', $bornAt)) - 1;
return $age;
}
echo getAge('29-01-1986');
?>
| . | |
|
|
|
|
|
|
|
для: Nemezis
(22.01.2008 в 18:34)
| | Ответ неверный. | |
|
|
|
|
|
|
|
для: Trianon
(22.01.2008 в 21:05)
| | А какой верный? )) | |
|
|
|
|
|
|
|
для: kis-kis
(20.01.2008 в 18:12)
| | хм ну на 365 по делить что ни верного вы бы сразу и пояснили? | |
|
|
|
|
|
|
|
для: kvn
(21.01.2008 в 07:08)
| | хм... может из-за существования високосных годов? :) | |
|
|
|
|
|
|
|
для: CrazyAngel
(21.01.2008 в 09:11)
| | можно попробовать подойти комплексно вычислять сколько было высокосных лет за период :) и тд | |
|
|
|
|
|
|
|
для: KPETuH
(21.01.2008 в 09:27)
| | На одном сайте видел такой способ, но не знаю на сколько он хорош:
function mysql2data($sqldata,$b=NULL) {
global $wmm;
$sqldata=str_replace(' ','-',$sqldata);
$val = explode('-', $sqldata);
if($b==NULL) {
$data= substr($wmm[intval($val[1])],0,3).' '.$val[2].' '.$val[0];
} else {
$bd=$val[0].$val[1].$val[2];$dat=date("Ymd",time());
$data=intval(($dat - $bd) / 10000);
}
return $data;
}
|
| |
|
|
|
|
|
|
|
для: kis-kis
(21.01.2008 в 10:07)
| | Больше никто ничего не предложит? | |
|
|
|
|
|
|
|
для: kis-kis
(21.01.2008 в 13:05)
| | А если из текущей даты вычесть дату дня рождения, то из этого ничего не получится? | |
|
|
|
|
|
|
|
для: kis-kis
(20.01.2008 в 18:12)
| |
<?
// получаем дату для сравнения
$left_arr = explode("-", "1986-01-29");
$right_arr = explode("-", date("Y-m-d"));
// разница в днях
$return['d'] = $right_arr[2] - $left_arr[2];
if ( $return['d'] < 0 ) {
$right_arr[1]--;
$temp = date("t", mktime(0, 0, 0, $left_arr[1], 1, $left_arr[0])); // "t" - число дней в месяце
$return['d'] = $temp - $left_arr[2] + $right_arr[2];
}
// разница в месяцах
$return['m'] = $right_arr[1] - $left_arr[1];
if ( $return['m'] < 0 ) {
$right_arr[0]--;
$return['m'] += 12;
}
// разница в годах
$return['y'] = $right_arr[0] - $left_arr[0];
print_r($return);
|
или
SELECT (YEAR(CURDATE())-YEAR('1986-01-29'))-(RIGHT(CURDATE(), 5)<RIGHT('1986-01-29', 5));
|
| |
|
|
|
|
|
|
|
для: kis-kis
(20.01.2008 в 18:12)
| | Берем текущее время time() отнимаем timestamp даты рождения, ставим результат в date() | |
|
|
|
|
|
|
|
для: mihdan
(23.01.2008 в 10:34)
| | Ну-ну. | |
|
|
|
|
|
|
|
для: mihdan
(23.01.2008 в 10:34)
| | date() принимает дату в секундах, от 1970 года, а разницу дат она неадекватно обработает. | |
|
|
|
|
|
|
|
для: cheops
(23.01.2008 в 13:49)
| | Получается никто не знает как это сделать?
Вот что пишут на другом форуме:
IF(YEAR(users.birthdate)>0, YEAR(NOW())-YEAR(users.birthdate)-IF(DAYOFYEAR(NOW())<DAYOFYEAR(users.birthdate),1,0), '')
|
Это правильно? | |
|
|
|
|
|
|
|
для: kis-kis
(24.01.2008 в 20:01)
| | Мой пост в этой теме от 23.01.2008 в 10:27 вы видели? | |
|
|
|
|
|
|
|
для: Саня
(25.01.2008 в 00:40)
| | Отлично! Неплохо работает! Попользую! ) | |
|
|
|
|
|
|
|
для: Саня
(25.01.2008 в 00:40)
| | Видел ))
Кстати, ф-цию которую я указал в посте от 21.01.2008 в 10:07 тоже работает отлично - день в день.
Еще один вопрос, а как сделать проще подписи к возрасту (лет, год, года), чтобы ставить их в соответствии с правилами русского языка? | |
|
|
|
|
|
|
|
|
для: kasmanaft
(25.01.2008 в 11:02)
| | Спасибо. То что нужно. | |
|
|
|