Radni staz izracunavas tako sto izracunas broj dana od prvog datuma prve sledece godine (ne one u kojoj je prvi datum) do poslednjeg datuma pretposlednje godine (do 12-og meseca)-->d.Zatim izracunas koliko je bilo prestupnih godina u tom intervalu-->ne ukljucujuci prvu i poslednju-->n. Izracunas razliku d-n. Izracunas koliko je bili dana u prvoj godini (to je lako)-->d1, a zatim koliko je bilo dana u poslednjoj godini-->d2. (bilo da su prva i poslednja prestupne ili ne) ==> RS=d-n+d1+d2 na kraju sve podelis sa 365.
RS=(d-n+d1+d2)/365. Radni staz mozes pretstaviti u obliku decimalnog broja ili kao ceo broj i ostatak dana(ili meseci i dana). Broj dana se uglavnom u svim izracunavanjima vezuje za 30 . Ako sabiras vise intervala radnog staza onda ih sabiras kao decimalne brojeve (pojedinacno) i tek na kraju sve pretvaras u godine mesece i dane. U principu-ako su kratki intervali tipa od 02.02.2004 do 03.03.2004 onda pojedinacno racunas broj dana. Na kraju sve delis sa 365. Npr 4,53g RS : 4 g, 1:12=0,53:x==>6,36 mes==>6 m ---e sad moras da upotrebis 30 dana. 1:30=0,36:x ==> 10,8 dana.
Procedura koju saljem bi trebalo da radi-ali proveri. Nema bas neke veze sa ovim objasnjenjem. Koristio sam je ranije-i tad je to moglo tako. Moraces da ispravis deo oko konvertovanja dana (pod uslovom da radi- stvarno nisam stigao da proverim). Potrebna su ti dva edita, button i label, tabela sa poljima od i do, source. Petljom u edite (ili dbedite) iz tabele smestas datume(od-do). Labela pokazuje rezultat. Rezultat cuvas u posebnoj promenljivoj kojoj dodajes svaku novu vrednost (dane). na kraju delis sa 365 i pretvaras u G,M,D.
procedure BrojDana(s1, s2:string; var s: string);
var
datum1, datum2: TDateTime;
posebnodana,ukupdana,dana:real;
dan,prvidanuprvgod,zavrsnidanuzavrgod,
godina,ukupgodina,prvagodina,zavrsnagodina,
ukupmeseci,mesec,prvimesuprvgod,zavrsnimesuzavrsgod:integer;
var DanaUMesecu: array [1..12] of integer;
begin
dana:=0;
ukupgodina:=0;
ukupdana:=0;
posebnodana:=0;
ukupmeseci:=0;
DanaUMesecu[1]:=31;
DanaUMesecu[2]:=28;
DanaUMesecu[3]:=31;
DanaUMesecu[4]:=30;
DanaUMesecu[5]:=31;
DanaUMesecu[6]:=30;
DanaUMesecu[7]:=31;
DanaUMesecu[8]:=31;
DanaUMesecu[9]:=30;
DanaUMesecu[10]:=31;
DanaUMesecu[11]:=30;
DanaUMesecu[12]:=31;
datum1 :=strtodate(s1);
datum2 :=strtodate(s2);
dana :=datum2 - datum1; //ukupan broj dana -sluzi samo za poredjenje sa ukupdana ako ti je potrebno
//za godine koje nisu pocetna i zavrsna
prvagodina:=strtoint(s1[7]+s1[8]+s1[9]+s1[10]);
zavrsnagodina:=strtoint(s2[7]+s2[8]+s2[9]+s2[10]);
//za prvu godinu za broj meseci (i dana)-->posto nema puni broj godina
prvimesuprvgod:=strtoint(s1[4]+s1[5]);
zavrsnimesuzavrsgod:=strtoint(s2[4]+s2[5]);
//za preostali broj dana-->u prvom mesecu prve godine i u zavrsnom mesecu zavrsne godine
prvidanuprvgod:=strtoint(s1[1]+s1[2]);
zavrsnidanuzavrgod:=strtoint(s2[1]+s2[2]);
if zavrsnagodina-prvagodina<=1 then//ako su godine jedna do druge ili je ista godina
begin
if zavrsnagodina-prvagodina=0 then//ako je ista godina
begin
ukupgodina:=0;
if zavrsnimesuzavrsgod-prvimesuprvgod<=1 then//ako su dani u dva meseca koji su jedan do drugog ili su isti
begin
ukupmeseci:=ukupmeseci+0;
ukupdana:=ukupdana+datum2 - datum1;
posebnodana:=posebnodana+ukupdana;
end
else
begin
for mesec:=prvimesuprvgod+1 to zavrsnimesuzavrsgod-1 do
begin
ukupmeseci:=ukupmeseci+1;
if ((mesec=2)and (prvagodina mod 4 = 0)) then ukupdana:=ukupdana+29
else ukupdana:=ukupdana+DanaUMesecu[mesec];
end;
ukupdana:=ukupdana+DanaUMesecu[prvimesuprvgod]-prvidanuprvgod+zavrsnidanuzavrgod;
posebnodana:=DanaUMesecu[prvimesuprvgod]-prvidanuprvgod+zavrsnidanuzavrgod;
end;
end
else
begin
if zavrsnagodina-prvagodina=1 then//ako su godine jedna do druge
begin
ukupgodina:=0;
for mesec:=prvimesuprvgod+1 to 12 do
begin
ukupmeseci:=ukupmeseci+1;
if ((mesec=2)and (prvagodina mod 4 = 0)) then ukupdana:=ukupdana+29
else ukupdana:=ukupdana+DanaUMesecu[mesec];
end ;
//za zavrsnu godinu za broj meseci (i dana)-->posto nema puni broj godina
for mesec:=1 to zavrsnimesuzavrsgod-1 do
begin
ukupmeseci:=ukupmeseci+1;
if ((mesec=2)and (prvagodina mod 4 = 0)) then ukupdana:=ukupdana+29
else ukupdana:=ukupdana+DanaUMesecu[mesec];
end ;
posebnodana:=DanaUMesecu[prvimesuprvgod]-prvidanuprvgod;
posebnodana:=posebnodana+zavrsnidanuzavrgod-1;
ukupdana:=ukupdana+DanaUMesecu[prvimesuprvgod]-prvidanuprvgod;
ukupdana:=ukupdana+zavrsnidanuzavrgod-1;
end
end
end
else
begin//***************************
for godina:=prvagodina+1 to zavrsnagodina-1 do
begin
if godina mod 4 =0 then ukupdana:=ukupdana+366 else ukupdana:=ukupdana+365;//koliko dana u godinama izmedju prve (prvog datuma) i poslednje(poslednjeg datuma)
ukupgodina:=ukupgodina+1;
end;
for mesec:=prvimesuprvgod+1 to 12 do
begin
ukupmeseci:=ukupmeseci+1;
if ((mesec=2)and (prvagodina mod 4 = 0)) then ukupdana:=ukupdana+29
else ukupdana:=ukupdana+DanaUMesecu[mesec];
end ;
for mesec:=1 to zavrsnimesuzavrsgod-1 do
begin
ukupmeseci:=ukupmeseci+1;
if ((mesec=2)and (prvagodina mod 4 = 0)) then ukupdana:=ukupdana+29
else ukupdana:=ukupdana+DanaUMesecu[mesec];
end ;
posebnodana:=DanaUMesecu[prvimesuprvgod]-prvidanuprvgod;
posebnodana:=posebnodana+zavrsnidanuzavrgod-1;
ukupdana:=ukupdana+DanaUMesecu[prvimesuprvgod]-prvidanuprvgod;
ukupdana:=ukupdana+zavrsnidanuzavrgod-1;
end;//***************************
//ovo je varijanta gde se gleda 30 dana u mesecu (i standardnih 28 u februaru)-to moras proveriti!!!!
{if zavrsnimesuzavrsgod<>3 then
begin
if posebnodana>=30 then
begin
posebnodana:=posebnodana-30;
ukupmeseci:=ukupmeseci+1;
end;
end
else
begin
if posebnodana>=28 then
begin
posebnodana:=posebnodana-28;
ukupmeseci:=ukupmeseci+1;
end;
end;}
//ovo je varijanta gde se gleda poslednji mesec (broj dana u poslednjem mesecu)
if posebnodana>=DanaUMesecu[zavrsnimesuzavrsgod] then
begin
posebnodana:=posebnodana-DanaUMesecu[zavrsnimesuzavrsgod];
ukupmeseci:=ukupmeseci+1;
end;
{//ovo je varijanta gde se gleda prvi mesec (broj dana u prvom mesecu)
if posebnodana>=DanaUMesecu[prvidanuprvgod] then
begin
posebnodana:=posebnodana-DanaUMesecu[prvidanuprvgod];
ukupmeseci:=ukupmeseci+1;
end;}
if ukupmeseci>=12 then
begin
ukupgodina:=ukupgodina+1;
ukupmeseci:=ukupmeseci-12;
end;
s:=inttostr(ukupgodina)+ ' godina '+inttostr(ukupmeseci)+ ' meseci '+floattostr(posebnodana)+ ' dana';
end;
procedure TForm1.ButtonStazClick(Sender: TObject);
var t:string;
begin
BrojDana(editdat1.text,editdat2.text,t);//ili dbedit1.text, dbedit2.text
label1.caption:=t;//pokazuje rezultat
end;
MV