Newsgroup: it.comp.lang.delphi
Titolo: CONVERSIONE DI VALORI A DATE





Salve a tutti ho un piccolo problema: dalla 
differenza di due date sono riuscito ad avere il numero complessivo dei giorni, 
e fin qui tutto ok. Il mio problema e convertire questo numero in AA (anni) MM 
(mesi) GG (Giorni) . Come si fà? Ringrazio 
anticipatamente






Se mi permetti è una domanda un po' ambigua (nel senso che dovresti
spiegare meglio quello che vuoi ottenere )
Quanti giorni sono contienuti in un anno?
E quanti giorni sono contienuti in un mese?
E quanti mesi sono contienuti in un anno?
La domanda non è tanto "stupida",  infatti se tu rispondessi 
365, 31, 12 rispettivamente, allora avresti che un anno è formato da
365 giorni ma anche da 12*31= 372 giorni.
Fammi sapere qualche cosa e vedo se posso aiutarti.
Ciao Rocco.
Rocco Barbaresco:
Herrare Humanum Est,
Perseverare Ovest ....
(By Fichi D'India)

365 giorni ma anche da 12*31= 372 giorni.
Infatti... L'unica soluzione valida possibile e' quella di
implementare una funzione (tra l'altro un buon esercizio di
programmazione e logica) che dia la differenza tra *due date* (come il
DateDiff di SQL).
Massimo.
-- 
"Ciao Rex, che cavolo di situazione eh? Due dentro, due fuori, puo' succedere di tutto!"

 (Giorni) . Come si f=E0? Ringrazio anticipatamente
(forse) sono  semplicista:
Mesi = Giorni / 30
Anni = Mesi / 12
... approssimando, ovviamente
ps: posta in html, tnx ;)
Ciao,
Alan Solo


Quindi 31/12/2000 - 01/12/2000 = 1 anno e 5 giorni?


 Quindi 31/12/2000 - 01/12/2000 = 1 anno e 5 giorni?
eventulamente 1/1/x - 31/12/x
cmq:
[PASTE]
"approssimando, ovviamente"
concordo che la mia (non) soluzione e' semplicistica,
e forse e' meglio sapere con certezza cosa si vuole ottenere...
io darei un'occhiata anche a DecodeDate che ti scompone il TDate in
giorni mesi e anni...
Ciao,
Alan Solo



Salve a tutti ho un piccolo problema: 
dalla differenza di due date sono riuscito ad avere il numero complessivo dei 
giorni, e fin qui tutto ok. Il mio problema e convertire questo numero in AA 
(anni) MM (mesi) GG (Giorni) . Come si fà? Ringrazio 
anticipatamente


 


il codice che ho scritto a suo tempo è il seguente, 
ma nella conversione ho comunque alcuni errori


mi potreste aiutare????


 
  


DecodeDate(Table2AL.AsVariant -29 - 
Table2DAL.AsVariant, AA, MM, GG);


 
  
Table2ST.AsString := Table2AL.AsVariant 
+1 - Table2DAL.AsVariant;


   
Table2SU.AsString := 
Table2AL.AsVariant +1 - Table2DAL.AsVariant;


   
Table2SP_AA.AsString := 
IntToStr(AA);


   
Table2SP_MM.AsString := 
IntToStr(MM);


   
Table2SP_GG.AsString := 
IntToStr(GG);


   
if (AA) >= 1900
  
then Table2SP_AA.AsString := 
IntToStr(AA-1900);


   
if (MM) >= 12
  
then Table2SP_AA.AsString := 
IntToStr(AA-1900);


   
if (MM) >= 12 
 
then Table2SP_MM.AsString :=
  
IntToStr(GG-GG);


   
if (GG) >= 30
  
then Table2SP_MM.AsString := 
IntToStr(MM+1);


   
if (GG) = 30
  
then Table2SP_GG.AsString := 
IntToStr(GG-GG);


   
if (GG) = 31
  
then Table2SP_GG.AsString := 
IntToStr(GG-GG+1);


   
if ((MM) = 11) and
  
((GG) = 30) then Table2SP_AA.AsString := 
IntToStr(AA-1899);


   
if ((MM) = 11) and
  
((GG) = 30) then Table2SP_MM.AsString := 
IntToStr(MM-MM);


   
if (MM) >= 12
  
then Table2SP_AA.AsString := 
IntToStr(AA-1899);


   
if (MM) > 12
  
then Table2SP_MM.AsString :=
  
IntToStr(MM-MM);


   
if ((MM) = 12) and
  
((GG) = 30) then Table2SP_GG.AsString := 
IntToStr(GG-GG);


   
if ((MM) = 11) and
  
((GG) = 30) then Table2SP_GG.AsString := 
IntToStr(GG-GG);


   
if ((MM) = 12) and
  
((GG) >= 30) then 
Table2SP_AA.AsString := IntToStr(AA-1899);


   
if ((MM) = 12) and
  
((GG) >= 30) then 
Table2SP_MM.AsString := IntToStr(MM-MM+1);


   
Table2UT_AA.AsString := 
IntToStr(AA);


   
Table2UT_MM.AsString := 
IntToStr(MM);


   
Table2UT_GG.AsString := 
IntToStr(GG);


 


 
pp := 
StrToFloat(DBEdit17.Text);


 
ii := 
StrToFloat(DBEdit18.Text);


 
cc := 
StrToFloat(DBEdit19.Text);


 
yy := 
StrToFloat(DBEdit20.Text);


 
DecodeDate(pp-30, A1, M1, 
G1);


 
Table2TSMAA.AsString := 
IntToStr(A1);


 
Table2TSMMM.AsString := 
IntToStr(M1);


 
Table2TSMGG.AsString := 
IntToStr(G1);


 
if (A1) >= 1900
  
then Table2TSMAA.AsString := 
IntToStr(A1-1900);


 
if (M1) >= 12
  
then Table2TSMAA.AsString := 
IntToStr(A1-1900);


 
if (M1) >= 12
  
then Table2TSMMM.AsString :=
  
IntToStr(G1-G1);


 
if (G1) >= 30
  
then Table2TSMMM.AsString := 
IntToStr(M1-M1+1);


 
if (G1) = 30
  
then Table2TSMGG.AsString := 
IntToStr(G1-G1);


 
if (G1) = 31
  
then Table2TSMGG.AsString := 
IntToStr(G1-G1+1);


 
if ((M1) = 11) and
  
((G1) = 30) then Table2TSMAA.AsString := 
IntToStr(A1-1899);


 
if ((M1) = 11) and
  
((G1) = 30) then Table2TSMMM.AsString := 
IntToStr(M1-M1);


 
if (M1) >= 12
  
then Table2TSMAA.AsString := 
IntToStr(A1-1899);


 
if (M1) > 12
  
then Table2TSMMM.AsString :=
  
IntToStr(M1-M1);


 
if ((M1) = 12) and
  
((G1) = 30) then Table2TSMGG.AsString := 
IntToStr(G1-G1);


 
if ((M1) = 11) and
  
((G1) = 30) then Table2TSMGG.AsString := 
IntToStr(G1-G1);


 
if ((M1) = 12) and
  
((G1) >= 30) then 
Table2TSMAA.AsString := IntToStr(A1-1899);


 
if ((M1) = 12) and
  
((G1) >= 30) then 
Table2TSMMM.AsString := IntToStr(M1-M1+1);


 
DecodeDate(ii-30, A2, M2, 
G2);



Salve a tutti ho un piccolo problema: dalla differenza di due date sono riuscito ad avere il numero complessivo dei giorni, e fin qui tutto ok. Il mio problema e convertire questo numero in AA (anni) MM (mesi) GG (Giorni) . Come si fà? Ringrazio anticipatamente
Premesso che l'unico modo per avere una differenza corretta è quella
di confrontare due date e non avere il numero di giorni di differenza
e che avresti, almeno per gentilezza, potuto partecipare al thread che
ti riguardava, ti butto giu' una funzione da controllare e
ottimizzare:
TRetRec = record
  Anni, Mesi, Giorni: Word;
end;
function MyDateDiff(Date1, Date2: TDateTime): TRetRec;
var
  Anno1, Anno2, Mese1, Mese2, Giorno1, Giorno2: Word;
begin
  DecodeDate(Date1, Anno1, Mese1, Giorno1);
  DecodeDate(Date2, Anno2, Mese2, Giorno2);
  if Giorno2 < Giorno1 then begin
    Mese2 := Mese2 -1;
    if Mese2 = 0 then begin
      Mese2 := 12;
      Anno2 := Anno2 - 1;
    end;
    Giorno2 := Giorno 2 + pippo; //pippo è una funzione che ti torna
il numero di giorni nel mese e nell'anno che gli passi da date2
 
  end;
  Result.Giorni := Giorno2 - Giorno1;
  if Mee2 <  Mese1 then begin
     Mese2 := Mese2 + 12;
     Anno2 := Anno2 + 1;
  end;
  Result.Mesi := Mese2 - Mese1;
  Result.Anni := Anni2 - Anni1;
end;
