Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Operazione con ORARIO

  1. #1

    Operazione con ORARIO

    Ciao a tutti!
    Devo raffrontare degli orari e operare in questo modo:

    $ORA_ATTUALE = 1030 (10.30)
    $ORA_INIZIO_TURNO = 0900 (09.00)
    $ORA_FINE_TURNO = 1900 (19.00)

    Devo fare una SELECT per poter vedere quali sono gli operatori "presenti" in $ORA_ATTUALE.

    E tutto funziona correttamente:

    SELECT WHERE $ORA_INIZIO_TURNO <= $ORA_ATTUALE <= $ORA_FINE_TURNO

    L'errore c'e l'ho quando il turno è a cavallo delle 24.0o quando $ORA_FINE_TURNO è un valore inferiore a $ORA_INIZIO_TURNO

    es:

    $ORA_INIZIO_TURNO = 2300 (23.00)
    $ORA_FINE_TURNO = 0500 (05.00)

    Pensavo di NON USARE il TIMESTAMP in quanto il TURNO è FISSO PER TUTTO IL MESE, e per usarlo dovrei inserire 30 RECORD per ogni UTENTE con l'unica variazione del giorno lasciando invariato ANNO e MESE. L'unica soluzione però, sembra essere il TIMESTAMP con le specifiche di data e giorno.

    Avete qualche dritta o suggerimenti?
    Ringrazio tutti pe rla vs. disponibilità.

  2. #2
    Le ore sono sempre accompagnate dalla data poiche' si riciclano.

    Ad ogni buon modo potresti usare la IF nella query. Se ora fine < di ora inizio allora ora fine = ora fine + 24 ore.
    codice:
    select...
    WHERE TIME_FORMAT(CURTIME(), '%H%m') 
    BETWEEN data_i 
    AND IF(data_f < data_i, data_f + 2400, data_f)
    prova a vedere se funziona... l'orario l'ho considerato come numerico hhmm come hai detto tu.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Le ore sono sempre accompagnate dalla data poiche' si riciclano.
    cosa intendi????

    codice:
    select...
    WHERE TIME_FORMAT(CURTIME(), '%H%m') 
    BETWEEN data_i 
    AND IF(data_f < data_i, data_f + 2400, data_f)
    prova a vedere se
    funziona... l'orario l'ho considerato come numerico hhmm come hai detto tu.
    Se funziona... ti osannerò a vita

  4. #4
    Forse c'e da rivedere l'ora del momento quando questa e' inferiore all'ora dell'inizio.... non l'avevo considerato, per esempio:

    ora attuale = 0200
    ora inizio = 2200
    ora fine = 0500

    non funzionerebbe. Bisogna incrementare anche l'ora attuale con lo stesso criterio dell'ora fine. Fammici pensare un attimo.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Allora ho rivisto la query.

    es.:
    ora inizio 2200
    ora fine 0600 + 2400 = 3000

    ora check 0200 + 2400 = 2600 <- ok tra 2200 e 3000
    ora check 2100 + 2400 = 4500 <- ok superiore a 3000 viene esclusa
    ora check 0700 + 2400 = 3100 <- ok superiore a 3000 viene esclusa

    dovrebbe andare cosi':
    codice:
    WHERE if(TIME_FORMAT(CURTIME(), '%H%m') < data_i,
             TIME_FORMAT(CURTIME(), '%H%m') + 2400,
             TIME_FORMAT(CURTIME(), '%H%m') )
    
          BETWEEN data_i
          AND IF(data_f < data_i, data_f + 2400, data_f)
    dovrebbe essere tutto considerato .





    ps.: le ore si "riciclano" e' una espressione aziendale... cioe' ogni giorno ricominciano da capo e quindi non possono fornire valori di comparazione sul giorno.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    eh eh eh... stavo giusto giusto vedendo il codice precedente non "copriva" tutte le condizioni

    Ora dovrebbe essere ok
    In serata/domani provo tutto quanto !!!

    Thanks!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.