Somma di numeri del tipo Ore,Minuti

di il
36 risposte

36 Risposte - Pagina 3

  • Re: Somma di numeri del tipo Ore,Minuti

    01/06/2023 - willy55 ha scritto:


    Prima che l'oggetto del thread ("Somma di numeri del tipo Ore,Minuti") si focalizzi su ulteriori aspetti, vorrei porre un paio di annotazioni:
    a) Dovendo gestire gli orari di ingresso ed uscita dei lavoratori, è da tenere presente la data in cui avviene ciò; di norma avviene nella medesima giornata, ma può accadere che l'orario non si riferisca allo stesso giorno (con conseguente calcolo ripartito su: diurno, notturno, feriale, festivo, ecc.); quindi è preferibile che l'orario di ingresso e quello di uscita sia memorizzato  con la data di riferimento.
    b) In merito al calcolo dell'orario (determinato l'intervallo, in minuti, con la funzione DateDiff) per la ripartizione nelle ore e minuti è consigliabile impiegare quanto suggerito da Oregon (per presentare i minuti) ovvero utilizzare l'operatore MOD che restituisce solo il resto (più velocemente che effettuare un ricalcolo delle ore e la presentazione del numero di ore e dei minuti vengono singolarmente determinati).
    In sintesi:

    SELECT tblOrario.ID, tblOrario.Ingresso, tblOrario.Uscita, 
    DateDiff("n",[Ingresso],[Uscita]) AS IntervalloInMinuti, 
    [IntervalloInMinuti]\60 AS NrOre, 
    [IntervalloInMinuti] Mod 60 AS NrMinuti
    FROM tblOrario;

    Ciao Willy, come faccio a memorizzare l'orario con la data? Ho provato a fare data estesa ma mi continua ad uscire solo la data.

  • Re: Somma di numeri del tipo Ore,Minuti

    01/06/2023 - Nat ha scritto:

    Ciao Willy, come faccio a memorizzare l'orario con la data? Ho provato a fare data estesa ma mi continua ad uscire solo la data.

    Il Campo Data memorizza dd/mm/yy hh:mm:ss sempre e comunque… quello che tu definisci DataEstesa è solo un formato di visualizzazione.

    Se vuoi memorizzare Data+Ora nel campo data, perchè hai bisongo dei valori al minuto, devi memorizzare un dato che li contenga, NOW() oppure un valore che li conserva che generi tu.

    Che poi visualizzi in un modo o meno il dato li ha memorizzati.

    Verifica le possibili funzionalità del Formato e l'impatto che hanno sul valore reale memorizzato(Nullo).

  • Re: Somma di numeri del tipo Ore,Minuti

    01/06/2023 - @Alex ha scritto:


    01/06/2023 - Nat ha scritto:

    Ciao Willy, come faccio a memorizzare l'orario con la data? Ho provato a fare data estesa ma mi continua ad uscire solo la data.

    Il Campo Data memorizza dd/mm/yy hh:mm:ss sempre e comunque… quello che tu definisci DataEstesa è solo un formato di visualizzazione.

    Se vuoi memorizzare Data+Ora nel campo data, perchè hai bisongo dei valori al minuto, devi memorizzare un dato che li contenga, NOW() oppure un valore che li conserva che generi tu.

    Che poi visualizzi in un modo o meno il dato li ha memorizzati.

    Verifica le possibili funzionalità del Formato e l'impatto che hanno sul valore reale memorizzato(Nullo).

    Quindi mi stai dicendo che non esiste un qualcosa di automatico? Cioè che mi faccia scegliere prima la data  poi inserire l orario? uff

  • Re: Somma di numeri del tipo Ore,Minuti

    01/06/2023 - Nat ha scritto:


    Quindi mi stai dicendo che non esiste un qualcosa di automatico? Cioè che mi faccia scegliere prima la data  poi inserire l orario? uff

    Lavori sulla formattazione della Data e Maschera di Input

  • Re: Somma di numeri del tipo Ore,Minuti

    01/06/2023 - By65Franco ha scritto:


    01/06/2023 - Nat ha scritto:


    Quindi mi stai dicendo che non esiste un qualcosa di automatico? Cioè che mi faccia scegliere prima la data  poi inserire l orario? uff

    Lavori sulla formattazione della Data e Maschera di Input

    SI ok, sto dando i numeri! Grazie

  • Re: Somma di numeri del tipo Ore,Minuti

    Ho notato, effettuando delle prove, un errore nel calcolo fornito dalla funzione DateDiff di Access: 
    https://support.microsoft.com/it-it/office/funzione-datediff-e6dd7ee6-3d01-4531-905c-e24fc238f85f
    Nel particolare l'errore si verifica quando gli intervalli di tempo comprendono date con giorni diversi e si calcolano i minuti con un valore inferiore ai 60 secondi, in quanto viene restitituito un minuto anche se i minuti dovrebbero essere zero.

    Il seguente esempio evidenzia dei casi con gli errori possibili:

    IDIngressoUscitaIntervalloInMinutiNrOreNrMinuti
    130/12/2023 23:59:5931/12/2023 00:00:01101
    331/12/2023 23:59:5801/01/2024101
    530/12/2023 23:59:5931/12/2023 00:00:58101
    631/12/2023 23:59:5901/01/2024 00:00:01101
    QueryOrario

    Credo che la funzione  DateDiff("n";[Ingresso];[Uscita]) effettui un arrotondamento per eccesso, quindi una possibile soluzione è gestire questo singolo caso, adeguando il codice nella presentazione dei dati.

  • Re: Somma di numeri del tipo Ore,Minuti

    02/06/2023 - willy55 ha scritto:


    Ho notato, effettuando delle prove, un errore nel calcolo fornito dalla funzione DateDiff di Access: 
    https://support.microsoft.com/it-it/office/funzione-datediff-e6dd7ee6-3d01-4531-905c-e24fc238f85f
    Nel particolare l'errore si verifica quando gli intervalli di tempo comprendono date con giorni diversi e si calcolano i minuti con un valore inferiore ai 60 secondi, in quanto viene restitituito un minuto anche se i minuti dovrebbero essere zero.

    Il seguente esempio evidenzia dei casi con gli errori possibili:

    IDIngressoUscitaIntervalloInMinutiNrOreNrMinuti
    130/12/2023 23:59:5931/12/2023 00:00:01101
    331/12/2023 23:59:5801/01/2024101
    530/12/2023 23:59:5931/12/2023 00:00:58101
    631/12/2023 23:59:5901/01/2024 00:00:01101
    QueryOrario

    Credo che la funzione  DateDiff("n";[Ingresso];[Uscita]) effettui un arrotondamento per eccesso, quindi una possibile soluzione è gestire questo singolo caso, adeguando il codice nella presentazione dei dati.

    C'è anche il limite delle 23:59:59… pertanto come dicevi tu bisogna assolutamente portarsi dietro anche la data del giorno. Per evitare arrotondamenti etc… io ho usato solo la Datediff per estrarre i totale secondi.
    Poi da lì ho ricostruito una stringa per essere visualizzata e/o stampata in un formato tipo Orario… ma ovviamente è una stringa perchè c'è il limite detto sopra.

    Ho preso il tuo spunto, con @Alex siamo andati verso una semplificazione del codice rispetto a quello che avevo buttato giù e ho fatto una piccola demo dove una Function ritorna in una stringa il numero delle Ore/Minuti/secondi nei formati :
    hh:mm:ss 
    oppure 
    hh:mm
    oppure 
    hh

    Pertanto secondo i parametri passati si ha una rappresentazione Stringa del tempo intercorso tra due date/time che può essere utilizzato in diversi scenari.
    Nell'altro Post ho messo la Demo per poter verificare se la Function esegue correttamente i calcoli… 
    Invece alla luce del codice che hai presentato, si potrebbe implementare con un ulteriore Option nei parametri, se si vuole anche la rappresentazione in numeri di giorni … “dd hh:mm:ss”  (non sarebbe per niente male)

    C'è solo un grande problema…. bisogna che Nat, che comunque si vede che si impegna, si metta a studiare un pò di più e un pò meglio.  ;))
    (scherzoooo)

Devi accedere o registrarti per scrivere nel forum
36 risposte