Консультация № 68599
26.12.2006, 04:48
0.00 руб.
0 3 3
Помогите пожалуйста. Если пользователь вводит день месяц и год своего рождения, как мне вычислить сколько ему лет сейчас?

Обсуждение

Неизвестный
26.12.2006, 08:06
общий
это ответ
Здравствуйте, Костенко Игорь Викторович!

Вот примерно какой код у меня получилься (см. Приложение)

Ф-я ExtractDate разбивает дату на день, месяц, год
(можно в отдельную ф-ю не делать, но я для удобства вынес).

УДАЧИ

Приложение:
...uses...;Type E_Date=record Day: Integer; Month: Integer; Year: Integer;end;type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); Function ExtractDate(S_Date: TDateTime): E_Date; private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);var Age: integer; Tmp: E_Date;begin Tmp:=ExtractDate(Date); Age:=Tmp.Year-StrToInt(Edit3.Text); if(StrToInt(Edit2.Text)>=Tmp.Month) and(StrToInt(Edit1.Text)>Tmp.Day) then Age:=Age-1; showmessage(inttostr(Age));end;Function TForm1.ExtractDate(S_Date: TDateTime): E_Date;var Str: String;begin Str:=DateToStr(S_Date); if Length(Str)=9 then Result.Day:=StrToInt(Copy(Str,1,1)) else Result.Day:=StrToInt(Copy(Str,1,2)); Result.Month:=StrToInt(Copy(Str,Length(Str)-6,2)); Result.Year:=StrToInt(Copy(Str,Length(Str)-3,4));end;end.
Неизвестный
26.12.2006, 09:27
общий
это ответ
Здравствуйте, Костенко Игорь Викторович!

в uses подключаем модуль DateUtils

а код следующий:

var
nw, birth: TDateTime;
yr: Variant;
begin
nw:=Now;
birth:=StrToDateTime(‘30.06.1964‘);
c:=YearOf(nw-birth) div 365 //здесь я не заморачиваюсь с поправкой на
//високосный год
//лучше создать отдельную функцию с учётом 1 дня високосного года
ShowMessage(c);
end.
Неизвестный
26.12.2006, 12:04
общий
это ответ
Здравствуйте, Костенко Игорь Викторович!

Хотелось бы привести еще один подобный пример по решению данной задачи.

Опять же используем модуль <font color=purple><b>DateUtils</b></font> из данного модуля нам потребуется такая функция:
<font color=purple><b>function DaysBetween(const ANow, AThen: TDateTime): Integer;</b></font>

И непосредственно сам код:
<code>
procedure TForm1.BitBtn1Click(Sender: TObject);
var dt:TDate;
begin
<font color=green><b>{узнаем сколько лет прошло со дня рождения Великого Вождя Революции Ленина Владимира Ильича}</b></font>
dt:=StrToDate(‘22.04.1870‘);
Edit1.Text:=IntToStr(DaysBetween(dt,Date) div 365);
end;
</code>

Good Luck!!!
Форма ответа