Grazie per l'aiuto Luisa
non credo, datediff torna un numerico che non ha a che vedere con una
data formattata ma e' solo il numero di intervalli tra due date: ti
dice, ad es, 400 giorni, non 1 anno, 2 mesi e 5 giorni.
-----------------------------------
non studio non lavoro non guardo la tv non vado al cinema non faccio sport
-----------------------------------
togliete NOSPAM. per rispondermi via email
-----------------------------------
il sito comune di it.comp.database.access: http://members.xoom.it/it_db_access
non e' affatto una sciocchezza e c'e' un problema di fondo.
il tipo data/ora di access non e' fatto per registrare intervalli di
tempo, e' fatto per registrare degli istanti precisi. facendo un
paragone geometrico, e' simile al punto sull'ascissa, non al segmento
(come invece avviene per il tipo data/ora di escel che comunque non
gestisce i valori negativi).
in altre parole, il dataora di access ti dice semplicemente quanto
disti dal suo punto zero, fissato alle ore 00:00 del 1 gennaio
dell'anno 100. tu credi di poter scrivere, chesso', 40:00 per
indicare 40 ore di stipendio, in realta' hai scritto qualcosa che
corrisponde alle ore 16 del 2 gennaio dell'anno 100.
l'unica cosa da fare e' scomporre i valori nei loro componenti e
sommarli algebricamente tra loro, applicando i dovuti riporti: ti
sommi i giorni e se viene piu' di trenta fai il modulo 30 e hai i
giorni, prendi l'int della divisione per trenta e hai i mesi, rifai il
modulo 12 ecc. ecc..
li riassembli in un valore stringa e usi quello per presentarlo
all'utente.
ah, i mesi come li consideri, di 30, 31, commerciali, bancari...?
>Ciao
>Luisa ha scritto nel messaggio <7g4b71$ld3$1...@fe1.cs.interbusiness.it>...
>>Sono un po' fusa . Sto lavorando a questa "scemenza " da ore e non trovo la
>>soluzione esatta.
>>ho due date in due campi diversi e vorrei fare una funzione che calcola
>>esattamente gli anni, i mesi e i giorni che intercorrono tra le due date.
>>Non semplicemente come differenza ( month(date1)- month(date2) e
>>day(date1)-day(date2)) ma se la differenza č negativa devo calcolare i mesi
>>e i giorni esatti.
>>Magari č una sciocchezza ma non mi viene..
>>
>>Grazie per l'aiuto Luisa
>>
>Credo che la funzione DateDiff possa risolvere (torna anche valori negativi)
>Ciao marco
>
>
Non piů di una settimana fa ho visto una risposta ad una identica
domanda (sarai mica sempre tu ?). Non mi interessava, perň mi č
sembrata molto esauriente. Cerca un pň.
Ciao. Loris.
Visto che il valore restituito è un variant di tipo long, per ottenere
dati precisi è però necessario utilizzare i secondi quale unità di
misura; nell'esempio seguente viene calcolata una differenza tra date
in ore intere (f1) e in ore e decimali di ore (f2); data1 e data2 sono
di tipo date/time.
data1 data2
------------------------ ---------------------------
01/01/99 8.00.00 03/01/99 16.45.00
03/01/99 16.45.00 01/01/99 8.00.00
f1 f2 giorni ore minuti
-------- --------- ------- ---- --------
56,00 56,75 2 8 45
-56,00 -56,75 -2 -8 -45
dove
f1 = DateDiff("h";[data1];[data2])
f2 = (DateDiff("s";[data1];[data2]))/3600
naturalmente, per ottenere giorni, ore e minuti vanno effettuate le
opportune conversioni e, quindi:
giorni = Sgn([f2])*Int(Abs([f2]/24))
ore = Sgn([f2])*Int(Abs([f2]-([giorni]*24)))
minuti = Sgn([f2])*(Abs([f2])-Int(Abs([f2])))*60
naturalmente resta il problema della conversione in anni e mesi;
ovvero:
quanti giorni ha un mese: 30, 31, 28 o 29 ?
quanti giorni ha un anno: 365 o 366 ?
On Tue, 27 Apr 1999 14:49:12 +0200, "Luisa" <lu...@netquasar.com>
wrote:
>Sono un po' fusa . Sto lavorando a questa "scemenza " da ore e non trovo la
>soluzione esatta.
>ho due date in due campi diversi e vorrei fare una funzione che calcola
>esattamente gli anni, i mesi e i giorni che intercorrono tra le due date.
>Non semplicemente come differenza ( month(date1)- month(date2) e
>day(date1)-day(date2)) ma se la differenza è negativa devo calcolare i mesi
>e i giorni esatti.
>Magari è una sciocchezza ma non mi viene..
>
>Grazie per l'aiuto Luisa
>
---------------
Guido
guc...@gedy.it
quello che intendevo dire io e' che datediff ti dice o quanti giorni o
quanti mesi o quanti anni ecc..
non ti combina le cose in modo da poter dire che tra data e data ci
sono x anni, y mesi e z giorni "tutti insieme". o ti dice i giorni o
i mesi o gli anni.
del resto dice l'help:
Restituisce un valore Variant (Long) corrispondente al numero di
intervalli di tempo tra due date specificate.
cioe' restituisce un numerico, non un dataora. non credo nemmeno che
gli puoi applicare un format (che tra l'altro avrebbe poco senso vista
la variabilita' del calendario e la natura del tipodati data/ora piu'
vicina al punto che non al segmento).
se uno ha bisogno di sapere che tra il 15 gennaio 1998 e il 30 marzo
1999 passa "1 anno, 2 mesi, 15 giorni" tocca che si scrive una
funzione ad hoc.
se mi sfugge qualcosa saro' lieto di un esempio.
aaaah vabbe', devi scrivere una routine ad hoc... quello che dicevo
io...
Qualche mese fa ho scritto qc nel ng inglese mpda:
'-----------------------
Public Function YMDgone(argdate As Date)
' shows difference between argDate and today
' by Karl Donaubauer 24.1.1999 using the DevAshishian boolean-trick ;-)
Dim Ygone As Integer, Mgone As Byte, Dgone As Byte
If IsNull(argdate) Then Exit Function
Ygone = DateDiff("yyyy", argdate, Date) _
+ Int(Format(Date, "mmdd") < Format(argdate, "mmdd"))
Mgone = Int((DateDiff("m", argdate, Date) _
+ Int(Format(Date, "dd") < Format(argdate, "dd")))) Mod 12
If Day(argdate) <= Day(Date) Then
Dgone = Format(Date, "dd") - Format(argdate, "dd")
Else
Dgone = Day(DateSerial(Year(argdate), Month(argdate) + 1, 0)) _
- Day(argdate) + Day(Date)
End If
YMDgone = Ygone & " year" & IIf(Ygone = 1, " ", "s ") _
& Mgone & " month" & IIf(Mgone = 1, " ", "s ") _
& Dgone & " day" & IIf(Dgone = 1, " ", "s")
End Function
'-----------------------
cu
Karl
------
Access-FAQ http://members.eunet.at/donkarl/ (tedesco)
Per rispondermi rimuovere XDELETEX dall'indirizzo email.