|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
[VB6] calcolare differenza tra date
Buona domenica a tutti.
Non riesco in visual basic ad effettuare un calcolo tra date; es: input al 03/03/2005 alle 15:00:39 output al 06/03/2005 alle 20:31:46 non riesco a capire come fargli fare il totale delle ore e dei giorni. Mi aiutate? Thx. RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Feb 2004
Città: Molfetta (BA) Squadra:BARI
Messaggi: 1082
|
io so che il visual basic ha una funzione predefinita che calcola la distanza in giorni dalla data odierna. Si chiama DateDiff. C'è una peculiarità: nel caso la data inserita in input è anteriore alla data odierna, il numero di giorni risulta essere negativo.
questo è il codice comunque (che puoi anche trovare nell'help in linea) Codice PHP:
__________________
Ho felicemente trattato con: Raziel1984,]Rik`[,fab77,pralina,vin81,drago,Qrama,Hangar18,gallo85,kikbond |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
scusa, colpa mia che mi sono espresso una schifezza..
allora, in un database, ho un campo "Orario", che memorizza un "Now".... es.: 06/03/2005 23.14.05 quindi, mi prende la data precisa completa di ora, minuti e secondi. Bene, quello che avrei necessità di fare, è che anzichè prendermi l'orario in questa maniera, me lo divida in: data ora in modo da avere nel database: data 06/03/2005 ora 23.14.05 e fin qui, credo che devo solo capire come "scomporre" il comando Now per farmi questa divisione. ora, succede che devo fare il calcolo del tempo in base alle ore, e non alla data, ovvero: ora1 23.00.00 ora2 24.00.00 totale ore 1.00 ho provato con: DateDiff("h", Ora1, Ora2) ma senza successo ![]()
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Aug 2002
Città: Biella
Messaggi: 1882
|
Allura, per fare quello che vuoi tu fai così:
MsgBox Format(Now, "dd/mm/yyyy") MsgBox Format(Now, "hh.ss") naturalmente metti in Now la data presa dal database. Per fare i calcoli, è giusto come fai tu, ma le 24 nn sono un ora, perchè in tutto il mondo sono le 0 !! Quandi mi sa che devi rivedere un po' la faccenda.
__________________
"Analizzando e valutando ogni giorno tutte le idee, ho capito che spesso tutti sono convinti che una cosa sia impossibile, finchè arriva uno sprovveduto che non lo sa e la realizza!" A. Einstein |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
![]() allora, la tabella del db ha questi campi: Nome data orario bene, la divisione di "Now" l'ho semplicemente effettuata così: in "Date" e in "Time", in modo che nei due campi del db ottengo: RaouL 07/03/2005 13.10.25 E fin qui va tutto bene ma....quello che in realtà devo calcolare, è il tempo che "Raoul" ha trascorso tra quando ha inserito per la prima volta il suo nome per iniziare la sessione, e quando lo ha ri-digitato per terminare. Quindi, nel DB io avrò ad esempio: Codice:
RaouL 07/03/2005 13.10.25 RaouL 07/03/2005 18.10.25 ![]()
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Aug 2002
Città: Biella
Messaggi: 1882
|
Io ho provato, ma se faccio così...
Codice:
MsgBox DateDiff("h", CDate("07/03/2005 13.10.25"), CDate("07/03/2005 18.10.25")) ![]()
__________________
"Analizzando e valutando ogni giorno tutte le idee, ho capito che spesso tutti sono convinti che una cosa sia impossibile, finchè arriva uno sprovveduto che non lo sa e la realizza!" A. Einstein |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
Ma mi funziona se ad esempio io prendo l'intervallo da due textbox, o due variabili, ma non mi riesce di farlo funzionare visto che la Data1 e la Data2, sono un recordset; es.: Codice:
MsgBox DateDiff("h", rs("Orario"), rs("Orario")) ![]()
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
MsgBox DateDiff("h", CData(rs("Orario")), CDate(rs("Orario")))
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Aug 2002
Città: Biella
Messaggi: 1882
|
Quote:
![]()
__________________
"Analizzando e valutando ogni giorno tutte le idee, ho capito che spesso tutti sono convinti che una cosa sia impossibile, finchè arriva uno sprovveduto che non lo sa e la realizza!" A. Einstein |
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
![]() really sorry ![]() Grazie millissime cmq ![]() torno fra poco per bombardarvi di nuovo ![]()
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Però...... no, evidentemente non ci arrivo:
Come differenza mi da sempre 0. ecco il codice: Codice:
MsgBox DateDiff("h", CDate(rs("orario")), CDate(rs("orario"))) 22.14.58 23.21.12 Ho provato a metterli anche senza secondi, ma qualsiasi orario abbia, mi restituisce sempre 0. ![]()
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Aug 2002
Città: Biella
Messaggi: 1882
|
Bhe ma è logico... pensaci, stai dando alla differenza la stesso valore, nn ti sembra veramente una caxxata?
Per fare quello che vuoi tu, ti devi memorizzare in una variabile Date il primo valore e poi il secondo! dtData1=rs("orario")) rs.movenext dtData2=rs("orario")) MsgBox DateDiff("h", dtData1, dtData2)
__________________
"Analizzando e valutando ogni giorno tutte le idee, ho capito che spesso tutti sono convinti che una cosa sia impossibile, finchè arriva uno sprovveduto che non lo sa e la realizza!" A. Einstein |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Tornando su questo codice che poi grazie al VS aiuto sono riuscito a far funzionare, ora volevo lavorare un pò di fino e fare in modo che non mi 'arrotondasse' il risultato.
Ad es.: se la differenza fra le ore è di 5.37 vorrei averlo con una certa precisione perchè riesco solo ad ottenere un arrotondamento a 5 ore. Suggerimenti? Thx. RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
DateDiff("h", dtData1, dtData2)
Perchè così gli chiedi di calcolarlo in ore... Calcolalo in secondi e poi fai una divisione intera per 60 per ottenere i minuti e una divisone intera per 3600 per ottenre le ore... Ciao ![]() |
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
non avendola trovata sono arrivato qui: http://msdn.microsoft.com/library/it...onsDtoGVBA.asp dove infatti non c'è una funzione apposita che restituisca direttamente un dato più preciso, cioè, come serve a me. Thx a lot ![]()
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
qualcosa non torna:
allora, nel db il campo "sessione" è in formato testo in questo campo ci va il dato in questa forma: 19/03/2005 18.00.40 (per esempio) ora, ho seguito il suggerimento di Matpez che mi diceva di crearmi una variabile per contenere questo campo sul quale calcolare la differenza: Codice:
Dim Sessione1 As String Dim Sessione2 As String ' apro la connessione al db..... Sessione1 = rs("sessione") rs.movenext Sessione2 = rs("sessione") 'dichiaro poi una variabile per la differenza ore: Dim TotOre As Double TotOre = DateDiff("s", Sessione1, Sessione2) / 3600 19/03/2005 07.30.00 19/03/2005 15.45.00 e dovrebbe quindi restituirmi 8.15 ore.... invece... me ne da 8.25 ![]()
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Te l'ho detto devi fare una divisone intera... Per ottenere i minuti o prendi il resto della divisione per 60...
Dim Ore As Integer, Minuti As Integer Ore = Secondi / 3600 Minuti = (Secondi Mod 3600) / 60 |
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
![]() l'unica cosa che non ho capito come fare, è come prendermi il resto che mi viene tramite mod e sommarlo all'ora totale ![]()
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
|
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
ho fatto così ma mi pare troppo complesso:
Codice:
wd = DateDiff("s", dtDate, dtDate1) / 60 ' ottengo i minuti wl = (wd / 60) ' ottengo le ore wm = wd Mod 60 ' ottengo il resto che sono i miei minuti wt = wl & "." & wm ' questo è il totale
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Va bene così...nonc apisco cosa tu voglia ottenere... Ad esempio se hai 3 ore e 30 minuti vuoi ottenere 3,5 ?
In tal caso fai: Dim res As Double ... ... ... res = Ore + (Minuti / 60) * 100 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:25.