Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Predstaviti razliku dva datuma?

[es] :: Pascal / Delphi / Kylix :: Predstaviti razliku dva datuma?

Strane: 1 2 3

[ Pregleda: 8738 | Odgovora: 41 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

Član broj: 72468
Poruke: 1155
*.kalik.info.



Profil

icon Predstaviti razliku dva datuma?26.01.2007. u 22:15 - pre 210 meseci
Pozdrav,

imam ovakav problem, naime, trebao bih razliku dva datuma predstaviti u godinama, mesecima i danima. Npr. razlika od 20.06.2006. do 15.05.2005 mi treba, otrpilike, kao rezultat broj_godina = 1, broj_meseci = 1, broj_dana = 5.

Da li neko zna kako bih to trebao napraviti?

Hvala unapred. (relativno hitno)
Someone's sitting in the shade today because someone planted a tree a long time ago.
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
212.200.145.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Predstaviti razliku dva datuma?26.01.2007. u 22:30 - pre 210 meseci
E nisam radio nešto sa datumima u Delphiju, ali jesam u PHPu pa bi trebalo i iz Delphija da može. U stvari sigurno može ako uvedeš UNIX timestamp, a trebalo bi ovako da ide:

1) prebaciš oba datuma u sekunde
2) oduzmeš veći datum od manjeg
3) rezultat iz sekundi pretvoriš u broj dana/meseci/godina

Hint: http://www.delphifaq.com/faq/f91.shtml
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

Član broj: 72468
Poruke: 1155
*.kalik.info.



Profil

icon Re: Predstaviti razliku dva datuma?27.01.2007. u 00:25 - pre 210 meseci
Zaboravio sam reći da sam pretražio forum i nisam rešio problem.

@Nemanja:
na osnovu linka koji si postavio odradio sam:
Code:
const
  // Sets UnixStartDate to TDateTime of 01/01/1970
  UnixStartDate: TDateTime = 25569.0;
...
var
 Dat1, Dat2: TDateTime;
 Razlika: Real;
...
begin
 Dat1:= StrToDateTime(MaskEdit1.Text);
 Dat2:= StrToDateTime(MaskEdit2.Text);
 DateTimeToUnix(Dat1);
 DateTimeToUnix(Dat2);
 Razlika:= Dat2 - Dat1;
 UnixToDateTime(Round(Razlika));
 ShowMessage(FloatToStr(Razlika));
end;

Rezultat je tačan broj dana, npr:
Citat:

MaskEdit1.Text:= '01.01.07'; (datum_od)
MaskEdit2.Text:= '11.01.07'; (danas)

razlika je 10 dana (Razlika = 10). Dotle sam došao. Sad to treba rastaviti na godine, mesece i dane, odnosno, tu razliku. Ako je Razlika veća od broja dana u godini, izdvojiti godine, potom proveriti ostatak, pa ako je veći od broja dana u mesecu izdvojiti broj meseci i na kraju, ostatak u danima.

Ako neko ima ideju, kako ovo rešiti, neka se uključi, ili ako ima bolje rešenje, neka ga izloži.
Someone's sitting in the shade today because someone planted a tree a long time ago.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Predstaviti razliku dva datuma?27.01.2007. u 00:40 - pre 210 meseci
> E nisam radio nešto sa datumima u Delphiju, ali jesam u PHPu pa bi trebalo i iz Delphija da može. U stvari sigurno može ako uvedeš UNIX
> timestamp, a trebalo bi ovako da ide:

> 1) prebaciš oba datuma u sekunde
> 2) oduzmeš veći datum od manjeg
> 3) rezultat iz sekundi pretvoriš u broj dana/meseci/godina

> razlika je 10 dana (Razlika = 10). Dotle sam došao. Sad to treba rastaviti na godine, mesece i dane, odnosno, tu razliku. Ako je Razlika veća od
> broja dana u godini, izdvojiti godine, potom proveriti ostatak, pa ako je veći od broja dana u mesecu izdvojiti broj meseci i na kraju, ostatak u danima.

Što jednostavno kad može komplikovano je l' tako :) Za prostu razliku u danima (i delovima dana) je dovoljno oduzeti dva datuma jedan od drugog. Npr.
Code:

var
  d1, d2: TDateTime;
begin
  d1 := Now;
  d2 := Now + 40.3;

  Caption := FloatToStr(d2 - d1);
end;


Kvalitetnije rešenje treba da uzme nekoliko stvari u obzir, evo jednog primera, dosta davno sam ga pisao i nije baš reprezentativan primer, može to mnogo lepše i jednostavnije :)

Code:

procedure BrojDana(d1, d2: TDate; var Dan, Mes, God: Integer);
var
  i, Raz: Integer;
  Dan1, Dan2, Mes1, Mes2, God1, God2: Word;
begin
  Dan := 0;
  Mes := 0;
  God := 0;
  DecodeDate(d1, God1, Mes1, Dan1);
  while d1 < d2 do
  begin
    Inc(God1);
    d1 := EncodeDate(God1, Mes1, Dan1);
    if d1 <= d2 then
      Inc(God)
    else begin
      Dec(God1);
      d1 := EncodeDate(God1, Mes1, Dan1);
      Break;
    end;
  end;
  while d1 < d2 do
  begin
    Inc(Mes1);
    if Mes1 = 13 then
    begin
      Inc(God1);
      Dec(Mes1);
    end;
    d1 := EncodeDate(God1, Mes1, Dan1);
    if d1 <= d2 then
      Inc(Mes)
    else begin
      Dec(Mes1);
      d1 := EncodeDate(God1, Mes1, Dan1);
      Break;
    end;
  end;
  while d1 < d2 do
  begin
    d1 := d1 + 1;
    if d1 <= d2 then
      Inc(Dan)
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  Dan, Mes, God: Integer;
begin
  BrojDana(StrToDate('05/02/2002'), StrToDate('18/04/2002'), Dan, Mes, God);
  Caption := IntToStr(Dan) + ';' + IntToStr(Mes) + ';' + IntToStr(God);
end;

 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

Član broj: 72468
Poruke: 1155
*.kalik.info.



Profil

icon Re: Predstaviti razliku dva datuma?27.01.2007. u 01:11 - pre 210 meseci
@savkic
Svaka čast.

@Nemanja
Hvala i tebi na pomoći.
Someone's sitting in the shade today because someone planted a tree a long time ago.
 
Odgovor na temu

viking13
Aleksandar Milanovic
SBB
Novi Beograd

Član broj: 131741
Poruke: 190
*.dynamic.sbb.co.yu.



Profil

icon Re: Predstaviti razliku dva datuma?27.01.2007. u 02:07 - pre 210 meseci
Citat:
Što jednostavno kad može komplikovano je l' tako


Vidim i ti si počeo toga da se pridržavaš.

Zar ovako nije MNOGO JEDNOSTAVNIJE?

Code:

uses
  DateUtils;

procedure DMYBetween(ANow, AThen: TDate; var Days, Months, Years: Integer);
begin
  Years := YearsBetween(ANow, AThen);
  AThen := IncYear(AThen, Years);
  Months := MonthsBetween(ANow, AThen);
  AThen := IncMonth(AThen, Months);
  Days := DaysBetween(ANow, AThen);
end;


Vidim ja da je bilo krajnje vreme da se pojavim ovde.

viking ®
 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

Član broj: 72468
Poruke: 1155
*.kalik.info.



Profil

icon Re: Predstaviti razliku dva datuma?27.01.2007. u 10:25 - pre 210 meseci
@viking13
Savim korektno.
Someone's sitting in the shade today because someone planted a tree a long time ago.
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
194.106.174.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Predstaviti razliku dva datuma?27.01.2007. u 11:43 - pre 210 meseci
Sad ja ispade najgori ovde?
Jbg, nisam nikad nešto preterano radio sa datumima u Delphiju, ali mi ono sa unix timestampom mnogo pomaže kad radim komunikaciju php aplikacija sa delphi aplikacijama pa sam mislio da i ovde može pomoći
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

milanescape
Kg

Član broj: 54988
Poruke: 50
*.ptt.yu.



Profil

icon Re: Predstaviti razliku dva datuma?28.01.2007. u 14:41 - pre 210 meseci
Imam nesto JAKO STARO-sto sam ranije koristio za proveru broja dana koriscenja nekog programa.
Ne odnosi se direktno na promenu sati, minuta i sekundi.Moze da posluzi.Aplikacija se postavlja u StartUp. Zbog "malo vece sigurnosti" vrednosti iz tabele mozes upisati u registri (ili na neko drugo po tebi sigurno mesto)a odatle ih ponovo ucitati u tabelu pri startovanju forme-neupuceniji korisnici tesko ce ukapirati odakle stizu podaci. Broj dana se lako pretvara u broj meseci i godina (potrebni su ti dbedit1, edit1,edit2, ,label10,label11,label12,label4,tabela i source...I SIGURNO JOS PO NESTO STO VEROVATNO NISAM PRIMETIO)
Kod se moze lako korigovati

procedure TForm1.FormActivate(Sender: TObject);
var d,m,g,dd,dm,dg:tdatetime;
sd,sm,sg,sdd,sdm,sdg:string;//razdvojeni datumi po danu,mesecu,godini
id,im,ig,idd,idm,idg:integer;
razd,razm,razg,Md,Mp,i,Brd:integer;/razlika u danima,mesecima,godinama...
var Mdanas: array [1..12] of integer;
Mpre: array [1..12] of integer;
begin

edit2.text:=datetostr(date);//EDIT2 PREUZIMA DANASNJI DATUM

if not DirectoryExists('D:\Delphi') then
Begin
CreateDir('D:\Delphi')
end;

if not Session.IsAlias('VREMEDAT') then
begin//ako ne postoji alias
if not DirectoryExists('D:\Delphi\VREMEDAT') then
Begin//*******
CreateDir('D:\Delphi\VREMEDAT');
with Session do
begin
AddStandardAlias('VREMEDAT', 'D:\Delphi\VREMEDAT','paradox');//kreiranje aliasa
SaveConfigFile;
end;
End;//*******
//kreiranje tabele
TABLE1:=TTABLE.CREATE(SELF);
Table1.DatabaseName:='VREMEDAT';
TABLE1.TABLENAME:='DAT.DB';
table1.FieldDefs.Add('Dat',ftstring,11,False);//poslednji datum
table1.FieldDefs.Add('DoS',ftinteger);//koliko do sada dana
Table1.CreateTable;

end;//zavrseno-ako ne postoji alias


//aktiviranje tabele table1.databasename:='VREMEDAT';
Table1.DatabaseName:='VREMEDAT';
TABLE1.TABLENAME:='DAT.DB';
datasource1.dataset:=table1;
Table1.active:=true;

//ODAVDE--------------------------------------------------------------------
LABEL4.CAPTION:=inttostr(TABLE1.FIELDBYNAME('DoS').asinteger);//POKAZUJE KOLIKO DANA DO SADA
If table1.recordcount<1 then Table1.append Else table1.edit;

//povezivanje dbedita1 sa tabelom1
dbedit1.datasource:=datasource1;
dbedit1.datafield:='Dat';

if dbedit1.text='' then
begin
table1.edit;
table1.fieldbyname('Dat').asstring:=datetostr(date);
end;

table1.edit;
table1.Post;

//AKO JE DANASNJI DATUM <OD PRETHODNO UPISANOG (DAKLE AKO JE DATUM VRACEN ZA NEKOLIKO DANA)
IF STRTODATE(EDIT2.TEXT)<STRTODATE(DBEDIT1.TEXT) THEN
BEGIN
TABLE1.EDIT;
TABLE1.FIELDBYNAME('Dat').asstring:=EDIT2.TEXT;//preuzmi sadasnji datum
label12.caption:='1'; //POVECAJ BROJ DANA ZA 1 (UVEK)
table1.fieldbyname('DoS').asinteger:=table1.fieldbyname('DoS').asinteger+1;//DoS-Do sada dana
END
ELSE
BEGIN
//za danasnji datum
Mdanas[1]:=31;
Mdanas[2]:=28;
Mdanas[3]:=31;
Mdanas[4]:=30;
Mdanas[5]:=31;
Mdanas[6]:=30;
Mdanas[7]:=31;
Mdanas[8]:=31;
Mdanas[9]:=30;
Mdanas[10]:=31;
Mdanas[11]:=30;
Mdanas[12]:=31;
//za uneti datum
Mpre[1]:=31;
Mpre[2]:=28;
Mpre[3]:=31;
Mpre[4]:=30;
Mpre[5]:=31;
Mpre[6]:=30;
Mpre[7]:=31;
Mpre[8]:=31;
Mpre[9]:=30;
Mpre[10]:=31;
Mpre[11]:=30;
Mpre[12]:=31;


//za uneti datum
sd:=edit1.text[1]+edit1.text[2];//stringovi
sm:=edit1.text[4]+edit1.text[5];
sg:=edit1.text[7]+edit1.text[8]+edit1.text[9]+edit1.text[10];;
id:=strtoint(sd);
im:=strtoint(sm);
ig:=strtoint(sg);

//za danasnji datum
sdd:=edit2.text[1]+edit2.text[2];//stringovi
sdm:=edit2.text[4]+edit2.text[5];
sdg:=edit2.text[7]+edit2.text[8]+edit2.text[9]+edit2.text[10];;
idd:=strtoint(sdd);
idm:=strtoint(sdm);
idg:=strtoint(sdg);

Md:=0;
Mp:=0;
razg:=idg-ig;

if razg>=1 then
begin/////////
IF IDM=12 THEN Md:=31-idm+1 else
BEGIN
for i:=1 to idm-1 do //ZA DANAS-od pocetka meseca do sad
begin
if i=2 then
begin
if idg mod 4 = 0 then Md:=Md+29 else Md:=Md+Mdanas;
end
else
begin
Md:=Md+Mdanas;
end;

end;
Md:=Md+idd;
END;
label10.caption:=inttostr(Md);

IF IM=12 THEN Mp:=31-id+1 else
BEGIN
for i:=im+1 to 12 do //ZA BROJ DANA PO MESECIMA DO KRAJA PREDHODNE GODINE
begin
if i=2 then
begin
if ig mod 4 = 0 then Mp:=Mp+29 else Mp:=Mp+Mpre;
end
else
begin
Mp:=Mp+Mpre;
end;

end;
Mp:=Mp+Mpre[im]-id+1;
END;
label11.caption:=inttostr(Mp);

Brd:=Mp+Md+(razg-1)*365;
label12.caption:=inttostr(Brd);
end/////////ako je razlika =1
else
begin///ako je razlika=0 ili <1
if razg=0 then
begin
IF IM=IDM THEN
BEGIN
Brd:=idd-id+1;
label12.caption:=inttostr(Brd);
END
ELSE
BEGIN
IF IDM=IM+1 THEN
BEGIN
Brd:=idd+Mpre[im]-id+1;
label12.caption:=inttostr(Brd);
END
ELSE
BEGIN
for i:=Im+1 to idm-1 do //od meseca do meseca (ne racunajuci dane u pocetnom i dane u krajnjem)
begin
if i=2 then
begin
if idg mod 4 = 0 then Md:=Md+29 else Md:=Md+Mdanas;
end
else
begin
Md:=Md+Mdanas;
end;

end;
label10.caption:=inttostr(Md+idd);
label11.caption:=inttostr(Mpre[im]-id);
Brd:=Md+idd+Mpre[im]-id+1;
label12.caption:=inttostr(Brd);//Brd je broj dana
END;

END;
end
else
begin//ako je razlika>1
////MOZES KORISTITI ZA NESTO
end;
end
END;
table1.Edit;
IF DATE>STRTODATE(DBEDIT1.TEXT) THEN
table1.fieldbyname('DoS').asinteger:=table1.fieldbyname('DoS').asinteger+strtoint(label12.caption)-1;
table1.fieldbyname('Dat').asstring:=datetostr(date);
table1.edit;
table1.post;
TABLE1.REFRESH;
close;
end;

Inace ako ti znaci nesto moje misljenje: Savkic-evo resenje je ubedljivo naj naj najbolje
Poz
Milan



[Ovu poruku je menjao milanescape dana 28.01.2007. u 15:52 GMT+1]

[Ovu poruku je menjao milanescape dana 28.01.2007. u 15:57 GMT+1]
MV
 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

Član broj: 72468
Poruke: 1155
*.kalik.info.



Profil

icon Re: Predstaviti razliku dva datuma?30.01.2007. u 13:26 - pre 209 meseci
Pozdrav,

uspeo sam, na osnovu viking13 i savkica da rešim problem izračunavanja od datuma do datuma. Hteo bih to proširiti sledećim, kad dobijem broj godina, meseci i dana hteo bih to sabrati sa već postojećim.

Dakle, ako već imam br.god = 5, br.mes = 10, br.dan = 12, a posle obračuna između dva datuma dobijem u nekim promenljivama br.god = 10, br.mes = 5, br.dan = 23, hteo bih to sabrati i dati konačan izveštaj. Nije problem sabrati nego rastaviti, kad se sabere: br.god = 15, br.mes = 15, br.dan = 35, sad to treba rastaviti na br.god = 16, br.mes = 4, br.dan = (4 ili 5)!?!

Da li je neko radio tako nešto i ako jeste, da li bi hteo na mom primeru objasniti kako to profesionalno odraditi, napominjem da sam koristio primer viking13.

Hvala unapred.
Someone's sitting in the shade today because someone planted a tree a long time ago.
 
Odgovor na temu

viking13
Aleksandar Milanovic
SBB
Novi Beograd

Član broj: 131741
Poruke: 190
*.sbb.co.yu.



Profil

icon Re: Predstaviti razliku dva datuma?30.01.2007. u 14:38 - pre 209 meseci
Problem je upravo ono 4 ili 5 o kome pričaš. Mada, ako ćemo iskreno može da bude i 7. :)

Da li je ikako moguće da umesto postojećeg zbira pamtiš početni datum?

Onda veoma jednostavno uporediš sadašnji sa početnim i nema sabiranja.

Em je mnogo lakše, em dobijaš tačne vrednosti bez obzira da li je upravo počeo mart ili septembar. :)


viking ®
 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

Član broj: 72468
Poruke: 1155
*.kalik.info.



Profil

icon Re: Predstaviti razliku dva datuma?30.01.2007. u 15:29 - pre 209 meseci
@viking13

Ne znam da li sam te razumeo najbolje, ali treba mi da kad na osnovu tvoje procedure dobijem tačan broj god, mes, dana to saberem sa već postojećim vrednostima.

Razumeo sam te, da uzmem prvi datum na osnovu kojeg sam dobio te vrednosti, pa onda to odradim sa recimo današnjim datumom i dobijem ukupan zbir!?!
Ako je tako, ne mogu to, jer ima prekida u datumu. Recimo, od 15.02.1978 - 22.05.1990., pa prekid, te onda od 10.10.2000. do 25.03.2006. Dakle, treba mi tačna razlika prva dva datuma, odnosno već imam tu razliku kao promenljive (br.god = 5, br.mes = 10, br.dan = 12, npr.) pa razlika druga dva, te sabrati te dve razlike i dobiti konačan zbir!?!

Ne znam da li sam bio jasan!?!
Someone's sitting in the shade today because someone planted a tree a long time ago.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Predstaviti razliku dva datuma?30.01.2007. u 15:54 - pre 209 meseci

> Dakle, ako već imam br.god = 5, br.mes = 10, br.dan = 12, a posle obračuna između dva datuma dobijem u nekim promenljivama
> br.god = 10, br.mes = 5, br.dan = 23, hteo bih to sabrati i dati konačan izveštaj. Nije problem sabrati nego rastaviti, kad se
> sabere: br.god = 15, br.mes = 15, br.dan = 35, sad to treba rastaviti na br.god = 16, br.mes = 4, br.dan = (4 ili 5)!?!

Sabiranje staža, rekao bih. Elem ne znam postoji li neki pravilnik o tome, ako tražiš čisto rešenje, najbolje da konsultuješ nekog iskusnog knjigovođu ili penzionu službu. Kada dobiješ tačne informacije, lako je. Kreneš od broja dana i deliš sa 30 (31) i dobiješ broj koji dodaš na postojeći iznos meseci a ostak ti je broj dana. Dalje mesece deliš sa 12, cele godine dodaješ u godine a resto su meseci.

 
Odgovor na temu

viking13
Aleksandar Milanovic
SBB
Novi Beograd

Član broj: 131741
Poruke: 190
*.sbb.co.yu.



Profil

icon Re: Predstaviti razliku dva datuma?30.01.2007. u 16:17 - pre 209 meseci
Citat:
loshmiscg: @viking13

Ne znam da li sam te razumeo najbolje, ali treba mi da kad na osnovu tvoje procedure dobijem tačan broj god, mes, dana to saberem sa već postojećim vrednostima.

Razumeo sam te, da uzmem prvi datum na osnovu kojeg sam dobio te vrednosti, pa onda to odradim sa recimo današnjim datumom i dobijem ukupan zbir!?!
Ako je tako, ne mogu to, jer ima prekida u datumu. Recimo, od 15.02.1978 - 22.05.1990., pa prekid, te onda od 10.10.2000. do 25.03.2006. Dakle, treba mi tačna razlika prva dva datuma, odnosno već imam tu razliku kao promenljive (br.god = 5, br.mes = 10, br.dan = 12, npr.) pa razlika druga dva, te sabrati te dve razlike i dobiti konačan zbir!?!

Ne znam da li sam bio jasan!?!


Sad kad mi je savkic otvorio oči sve mi je jasno i jasno mi je da ti moja ideja ne pomaže.

Kad saznaš tačne informacije javi se da nađemo najbolje rešenje.

Ako se za mesec uzima fiksni broj dana (recimo 30), onda ti ni moja početna funkcija nije dobra za tu svrhu. Jer će ti dati više dana za prelaz iz februara u mart, nego kad je u pitanju prelaz sa avgusta na septembar.

viking ®
 
Odgovor na temu

Whois

Član broj: 92214
Poruke: 37
195.252.79.*



Profil

icon Re: Predstaviti razliku dva datuma?30.01.2007. u 16:39 - pre 209 meseci
ako imas intervale koji su tdatetime tipa:
int1
int2
int3
int4

razliku nemoj da konvertujes nego je prosto oduzmi posto je tdatetime realni tip
znaci:

raz1:=abs(int1-int2);
raz2:=abs(int3-int4);
...

ukupno:=raz1+raz2+raz3....


pa onda koristis vikingovu funkciju za prikaz. Mozes da racunas od danasnjeg dana a mozes i od nekog drugog, mada mislim da treba da se racuna od int1 posto je to verovatno neki radni staz ili tako nesto

od danasnjeg dana:

DMYBetween(date, date+ukupno, Days, Months, Years)

a od int1:

DMYBetween(int1, int1+ukupno, Days, Months, Years)
 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

Član broj: 72468
Poruke: 1155
*.kalik.info.



Profil

icon Re: Predstaviti razliku dva datuma?30.01.2007. u 18:43 - pre 209 meseci
Code:
...
uses
  DateUtils;

procedure DMYBetween(ANow, AThen: TDate; var Days, Months, Years: Integer);
begin
  Years := YearsBetween(ANow, AThen);
  AThen := IncYear(AThen, Years);
  Months := MonthsBetween(ANow, AThen);
  AThen := IncMonth(AThen, Months);
  Days := DaysBetween(ANow, AThen);
end;

procedure TForm1.Button1Click(Sender: TObject);
var d,m,g,Days,Months,Years,br_mes,br_god,god_zbir,dan_ostatak,mes_ostatak : integer;
    ANow, AThen: TDate;
begin
try
 d:= 25;//radni staz donet  (broj dana)
 m:= 8;//radni staz donet  (broj meseci)
 g:= 15;//radni staz donet  (broj godina)
 ANow:= Now;
 AThen:= StrToDate('26.06.2000');//postavka datuma
 DMYBetween(ANow,AThen,Days, Months, Years);

 br_mes:= (d + Days) div 30;//broj meseci
 dan_ostatak:= (d + Days) - (br_mes * 30);//ostatak
 br_god:= (m + Months + br_mes) div 12;//broj godina
 mes_ostatak:= (m + Months + br_mes) - (br_god * 12);//ostatak
 god_zbir:= (g + Years + br_god);//zbir godine
finally
  ShowMessage('Radni staz donet - ' +'broj dana: '+ IntToStr(d) + ', broj meseci: '+ IntToStr(m) + ', broj godina: '+ IntToStr(g) + ';'
            + #13#13 + 'Od ' + DateToStr(AThen) + ' do ' + DateToStr(Now)+ ' ima: ' + IntToStr(Days) + ' dana; ' + IntToStr(Months) + ' meseci; ' + IntToStr(Years) + ' godina;'
            + #13#13 +'Ukupan radni staz iznosi: '
            + #13#13 +'Broj dana: '+ IntToStr(dan_ostatak)
            + #13#13 +'Brojmeseci: '+IntToStr(mes_ostatak)
            + #13#13 +'Broj godina: '+ IntToStr(god_zbir));
 end;
end;
...


Možemo početi odavde!?!
Someone's sitting in the shade today because someone planted a tree a long time ago.
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: Predstaviti razliku dva datuma?30.01.2007. u 18:55 - pre 209 meseci
Milose, evo ti opet nesto u VB-u, pa ces se valjda snaci ;)

Code:

'*****************************************************************************
'* FUNKCIJA KOJA VRACA godinu, mesec i broj dana razlike izmedju dva datuma
'*****************************************************************************
Public Function Razlika_Datuma(ByVal OdDatuma As Date, _
                               ByVal DoDatuma As Date, _
                               ImaGodina As Integer, _
                               ImaMeseci As Long, _
                               ImaDana As Long)

   If DoDatuma < OdDatuma Then
      ImaGodina = 0
      ImaMeseci = 0
      ImaDana = 0
      Exit Function
   End If
                               
   DoDatuma = DateAdd("d", 1, DoDatuma)
   ImaGodina = DateDiff("yyyy", OdDatuma, DoDatuma)
   
   If ImaGodina > 0 Then
    If Month(DoDatuma) <= Month(OdDatuma) Then
       If Month(DoDatuma) < Month(OdDatuma) Then
          ImaGodina = ImaGodina - 1
       Else
         If Day(DoDatuma) < Day(OdDatuma) Then
            ImaGodina = ImaGodina - 1
         End If
       End If
    End If
   End If
   
   OdDatuma = DateAdd("yyyy", ImaGodina, OdDatuma) 'Dodajem broj godina
   
   ImaMeseci = DateDiff("m", OdDatuma, DoDatuma)
   
   If Day(OdDatuma) > Day(DoDatuma) And ImaMeseci <> 0 Then
      ImaMeseci = ImaMeseci - 1
   End If
   
   OdDatuma = DateAdd("m", ImaMeseci, OdDatuma) 'Dodajem broj meseci
   
   ImaDana = DateDiff("d", OdDatuma, DoDatuma)
   
End Function

Duuuuugo koristim ovu funkciju.
 
Odgovor na temu

Whois

Član broj: 92214
Poruke: 37
195.252.79.*



Profil

icon Re: Predstaviti razliku dva datuma?30.01.2007. u 19:00 - pre 209 meseci
a ti bi tako, pa onda probaj ovo:

Code:

begin
try
 d:= 25;//radni staz donet  (broj dana)
 m:= 8;//radni staz donet  (broj meseci)
 g:= 15;//radni staz donet  (broj godina)
 ANow:= Now;
 AThen:= StrToDate('26.06.2000');//postavka datuma
 DMYBetween(ANow,AThen,Days, Months, Years);

 dmybetween(anow,incyear(incmonth(incday(Anow,d+days),m+months,g+years),dan_ostatak, br_mes, br_god);

 finally
  ShowMessage('Radni staz donet - ' +'broj dana: '+ IntToStr(d) + ', broj meseci: '+ IntToStr(m) + ', broj godina: '+ IntToStr(g) + ';'
            + #13#13 + 'Od ' + DateToStr(AThen) + ' do ' + DateToStr(Now)+ ' ima: ' + IntToStr(Days) + ' dana; ' + IntToStr(Months) + ' meseci; ' + IntToStr(Years) + ' godina;'
            + #13#13 +'Ukupan radni staz iznosi: '
            + #13#13 +'Broj dana: '+ IntToStr(dan_ostatak)
            + #13#13 +'Brojmeseci: '+IntToStr(br_mes)
            + #13#13 +'Broj godina: '+ IntToStr(br_god));
 end;
end;
 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

Član broj: 72468
Poruke: 1155
*.kalik.info.



Profil

icon Re: Predstaviti razliku dva datuma?30.01.2007. u 19:49 - pre 209 meseci
Hvala na odgovoru.

@Whois
Jesi siguran da je ovo korektno:
Citat:
dmybetween(anow,incyear(incmonth(incday(Anow,d+days),m+months,g+years),dan_ostatak, br_mes, br_god);

Ne moram onako kako sam napisao, ako imate kvalitetnija rešenja, a imate verovatno, rado ću ih usvojiti.

PozZ

[Ovu poruku je menjao loshmiscg dana 30.01.2007. u 21:02 GMT+1]
Someone's sitting in the shade today because someone planted a tree a long time ago.
 
Odgovor na temu

viking13
Aleksandar Milanovic
SBB
Novi Beograd

Član broj: 131741
Poruke: 190
*.dynamic.sbb.co.yu.



Profil

icon Re: Predstaviti razliku dva datuma?30.01.2007. u 20:10 - pre 209 meseci
Pažljivo ovo opet pročitajte:

Citat:
savkic
Sabiranje staža, rekao bih. Elem ne znam postoji li neki pravilnik o tome, ako tražiš čisto rešenje, najbolje da konsultuješ nekog iskusnog knjigovođu ili penzionu službu. Kada dobiješ tačne informacije, lako je.


Igor je ovde pokrenuo jedno veoma važno pitanje koje nema veze sa programiranjem.

Dok ovo ne rešiš, svaka dalje diskusija je suvišna.
viking ®
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Predstaviti razliku dva datuma?

Strane: 1 2 3

[ Pregleda: 8738 | Odgovora: 41 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.