PDA

Просмотр полной версии : [Function] CalculateAge



Osetin
22.07.2013, 14:47
Возвращает возраст из указанной даты(дд,мм,гггг)
Код:

GetAge(day, month, year){
new curday, curmonth, curyear;
getdate(curyear, curmonth, curday);
return curyear - year - _:(month>curmonth || month==curmonth && day>curday);
}
Пример использования:

if(dialogid == 10500)
{
new string[20], day, month, year;
sscanf(inputtext, "ddd", day, month, year);
format(string, sizeof(string), "Вам %d лет", GetAge(day, month, year));
return SendClientMessage(playerid, -1, string);
}


Код:

#include <a_samp>

stock GetAge(day, month, year){
new curyear, curmonth, curday;
getdate(curyear, curmonth, curday);
return curyear - year - ((month>curmonth || month==curmonth && day>curday) ? 1 : 0);
}

main(){
printf("0.0.0 - %d\n", GetAge(0, 0, 0));
printf("23.03.1994 - %d\n", GetAge(23, 3, 1994));
printf("23.07.1994 - %d\n", GetAge(23, 7, 1994));
printf("23.08.1994 - %d\n", GetAge(23, 8, 1994));
printf("23.05.1994 - %d\n", GetAge(23, 5, 1994));
print("");
}
Результат:

0.0.0 - 2013
23.03.1994 - 19
23.07.1994 - 19
23.08.1994 - 18
23.05.1994 - 19
P.S.: Тесты проводились 23.07.2013

Автор: Daniel_Cortez

Daniel_Cortez
22.07.2013, 20:41
В некоторых случаях CalculateAge будет работать неправильно.
Пример:

дата рождения: 12.08.2009
сегодня: 22.07.2013
результат: 4 года (когда должно быть 3)


Обычно для вычисления возраста я использую свою функцию:

GetAge(day, month, year){
new curday, curmonth, curyear;
getdate(curyear, curmonth, curday);
return curyear - year - _:(month>curmonth || month==curmonth && day>curday);
}
P.S.: Администрации просьба вынести данную функцию в 1-й пост.