Проблем с рождена дата и години

crazy_pi4

Registered
Здравейте! Имам следната функция:
Код:
function birthday($birthday)
{
list($day,$month,$year) = explode(".",$birthday);
$year_diff  = date("Y") - $year;
$month_diff = date("n") - $month;
$day_diff   = date("j") - $day;
if ($day_diff < 0 || $month_diff < 0)
$year_diff--;
return $year_diff;
}
Т.е. с тая функция изчислява от рождената ти дата на колко години си. Фатката е, че гледа годините... т.е. сега, ако пробвам тая функция и съм с рождена дата 10.1.1989 ще ми изкара, че съм на 19... нищо, че 10 януари е минал. Ако направя рождената ми дата на 10.10.1989, т.е. датата не е минала... пак ще ме пише 19... как да го оправя? Давайте идеи.
 
Просто добави проверка и за месеците и датите.Ето ти една тема със много по-съкратени фукнцийки.
 
Ето ти го примера
function getAge( $p_strDate ) {
list($Y,$m,$d) = explode("-",$p_strDate);
return( date("md") < $m.$d ? date("Y")-$Y-1 : date("Y")-$Y );
}
и като искаш да го изведеш на колко години , изкарваш датата по този начин
echo getAge("Година-Месец-Дата");
П.П. Естествено формата на датата може да си го оправиш според твоите нужди.
 
Replace каза:
Ето ти го примера
function getAge( $p_strDate ) {
list($Y,$m,$d) = explode("-",$p_strDate);
return( date("md") < $m.$d ? date("Y")-$Y-1 : date("Y")-$Y );
}
и като искаш да го изведеш на колко години , изкарваш датата по този начин
echo getAge("Година-Месец-Дата");
П.П. Естествено формата на датата може да си го оправиш според твоите нужди.
Имах предвид за на Ламера предложението. Твоето след малко ще го пробвам...
 
Следователно по моите нужди я направих така:
Код:
function birthday($birthday) { 
list($year,$month,$day) = explode(".",$birthday); 
return( date("md") < $month.$day ? date("Y")-$year-1 : date("Y")-$year ); 
}
И гледам.. на френда с рождена дата... **.5.1989 вече го пише на 20 години. Викам си е... стана. После променям датата на друг потребител на 1.11.1989 и пак 20.... ;(
 
Да не бъркаш формата на датата :idea:
<?php
function getAge( $p_strDate ) {
list($Y,$m,$d) = explode("-",$p_strDate);
return( date("md") < $m.$d ? date("Y")-$Y-1 : date("Y")-$Y );
}
echo "1989-10-15 = ".getAge("1989-10-15")."<br />";
echo "1989-2-9 = ".getAge("1989-2-9")."<br />";
echo "1989-6-24 = ".getAge("1989-6-25")."<br />";
?>
 
Не виждам разлика във функцията... еми виж как се вадят...
$age = filter...($row['age']...); //Филтъра просто добавя htmlspecialchars и т.н.
После имам на едно място $age т.е. датата, а на друго birthday($age) т.е. годините. В базата данни е така... 1.1.2009, 10.1.2009, 1.12.2009, 23.11.2009 и т.н.
 
lam3r4370 каза:
if($day_diff > $day) {}

и т.н
Ами сегашната дата - да речем 10 ,а денят на раждане е 9 т.е той е станал на 15 и става
if(10 > 9) {

}
т.е връща ти тру и ти му казваш какво да прави след това.$year_diff--;
return $year_diff;
Никъде не виждам $day_diff , etc
 
Не виждаш, щото на мен ми трябва само годината... не да ми пише, че е на еди колко си години и колко дена... другото е... прави сравнение дали деня е по-голям? Т.е. сега сме 10, а той е имал на 9... ами месеца... и всичко останало... няма ли нещо по-така, освен 100 иф-а?
 
(1)
Код:
$godini = $godina_sega - $godina_rajdane;
if($mesec_sega<$mesec_rajdane){
$godini--;
}elseif($mesec_sega==$mesec_rajdane){
if($den_sega<$den_rajdane){
$godini--;
}}
(2)
Код:
$godini = $godina_sega - $godina_rajdane;
if($mesec_sega<$mesec_rajdane || $mesec_sega==$mesec_rajdane && $den_sega<$den_rajdane){
$godini--;
}
 
function SetAges($age) {

$niz = strtotime ( $age );
$byy = time () - $niz;
return floor ( $byy / (60 * 60 * 24 * 365) );
}

// SetAges("13 Oct 1992");
// echo SetAges("13 Oct 1992");
 

Back
Горе