DateDiff che mostri giorni, ore e minuti

di
Anonimizzato11867
il
3 risposte

DateDiff che mostri giorni, ore e minuti

Sono molto nuovo di access e mi accingo a creare una query che date due date mi mostri il tempo trascorso tra esse in giorni, ore e minuti.
Ho così scritto in sql:
DateDiff("n",[Check In/Out].[Check In],[Check In/Out].[Check Out]) \ 1440 & " giorno " & DateDiff("n",[Check In/Out].[Check In],[Check In/Out].[Check Out]) \ 60 & " ore " & DateDiff("n",[Check In/Out].[Check In],[Check In/Out].[Check Out]) MOD 60 & " minuti " As ElapsedTime
ma mentre il numero di giorni e dei minuti è giusto, quello delle ore va oltre il numero 24 per cui se una diifferenza di tempo è di 27 ore, il risultato sarà che mi appare:
1 giorno 27 ore 0 minuti
e non
1 giorno 3 ore 0 minuti

Ho provato allora a fare due operazioni di "Mod" in modo che dividendo per 1440 (minuti in un giorno) il resto poi bastava nuovamente dividerlo con Mod per 60 e avere le ore restanti per l'ultimo giorno. Una cosa del tipo
DateDiff("n",[Check In/Out].[Check In],[Check In/Out].[Check Out]) Mod 1440 Mod 60 & " ore " 
ma non funziona, neppure se provo ad aggiungere qualche parentesi.
Come posso fare due operazioni di fila con Mod?

3 Risposte

  • Re: DateDiff che mostri giorni, ore e minuti

    C'è qualche cosa che non torna in quello che dici...
    Esempio Differenza in ORE =[h] tra
    Data1=#22/01/2013#
    Data2=#24/01/2013#
    
    ?DateDiff ("h", #22/01/2013#, #24/01/2013#)
     48 
    Stesse date, differenza in Minuti = [n]
    
    ?DateDiff ("n", #22/01/2013#, #24/01/2013#)
     2880
    Mi pare torni tutto come dovrebbe...
  • Re: DateDiff che mostri giorni, ore e minuti

    Forse ho spiegato male.
    Prendiamo in considerazione solo la parte relativa alle ore che è quella che mi da problemi.

    Attualmente uso
    DateDiff("n",[Check In/Out].[Check In],[Check In/Out].[Check Out]) \ 60 & " ore "
    che su, ad esempio, 2880 minuti ritorna 48 ore.
    Ma 48 ore sono 2 giorni, e io il "2 giorni" lo scrivo già con
    DateDiff("n",[Check In/Out].[Check In],[Check In/Out].[Check Out]) \ 1440 & " giorno "
    Quindi alla fine verrebbe fuori una scritta del tipo "2 giorni e 48 ore". Ma quello che voglio io è venga fuori "2 giorni e 0 ore".

    Un altro esempio.
    Tra 01/01/2013 00.00 e 03/01/2013 14.20 ci sono in tutto 3740 minuti.
    Io voglio che venga visualizzato tale intervallo di tempo in questo modo:
    2 giorni 14 ore 20 minuti

    Ma con il codice attuale, la parte relativa alle ore mi dà il numero di ore totali in quei due giorni e mezzo, perchè fa 3740 diviso 60 che fa 62 ore. E così alla fine mi ritrovo con la scritta:
    2 giorni 62 ore 20 minuti

    Se io invece potessi far dividere i minuti (3740) per 1440 (il numero di minuti in un giorno) e usare il resto di tale divisione per dividerlo a sua volta per 60, otterrei:
    3740/1440= 2 con resto di 860
    860/60= 14 che sono le mie ore dell'ultimo giorno non completo.

    Insomma, ho bisogno di creare un'espressione che sia una cosa simile a:
    (DateDiff(n,inizio,fine) Mod 1440) \ 60
    ma le parentesi messe così non fanno nulla.

    Gli esempi che ho trovato su internet sono troppo complicati per me e il mio attuale livello, e mi sembra che una soluzione come la mia sia molto snella e semplice, ma è attuabile?

    ps: prima ho sbagliato, dicevo che dovevo fare per due volte l'operazione con Mod e invece è da fare prima con Mod e poi con \
  • Re: DateDiff che mostri giorni, ore e minuti

    Ultimo aggiornamento: FUNZIONA!!!!
    Non so perchè prima le parentesi non mi funzionassero, ma ora funzionano e mi fanno i calcoli giusti!
    Questo è il mio codice finale:
    DateDiff("n",inizio,fine) \ 1440 & " g " &
    (DateDiff("n",inizio,fine) Mod 1440) \ 60 & " h " & 
    DateDiff('n',inizio,fine) Mod 60 & " m "
    e mi da come risultato per 3740 minuti:
    2 g 14 h 20 m
    Perfetto!!!
Devi accedere o registrarti per scrivere nel forum
3 risposte