Visualizzazione dei risultati da 1 a 5 su 5

Discussione: gestire orari

  1. #1

    gestire orari

    Ciao a tutti,
    ho questo problema:
    ho degli orari di inzio e fine turno, es. inizio alle 18:55:00 fine alle 00:08:00 oppure inizio alle 23:55:00 e fine alle 07:08:00.

    fin qui niente di strano; tutti coloro che fanno questo orario percepiscono un 'indennità che va calcolata dalle ore 22:00:00 alle ore 06:00:00; cioè, turno 18:55:00 - 00:08:00 competono 2 ore e 8 minuti di notturna, tunro 23:55:00 - 07:08:00 competono 5 ore e 52 minuti.
    se i turni fossero fissi non ci sarebbero problemi e che cambiano in continuazione e per ogni turno espletato bisogna verificare se ricade nella fascia oraria da contabilizzare.
    Qualcunbo ha qualche :master: idea? Io sono cotto .
    non sono un esperto di php e non sono riuscito a concretizzare molto con questo problema

  2. #2
    va beh, puoi provare a normalizzare la cosa:

    22:10:50 = 22 * 60 * 60 + 10 * 60 + 50

    poi guardi se la data d'inizio normalizzata è maggiore di

    22 * 60 * 60

    o minore di

    6 * 60 * 60

    Allora devi calcolargli l'indennizzo, altrimenti no

  3. #3
    Grazie del suggerimento.
    Finito di dare testate al muro (crollato ovviamente ), stavo lavorando su qualcosa del genere, visto la tua risposta mi è venuta un'idea , ci lavoro e faccio sapere.
    che tu sappia esite una funzione -between- in php :master: ?
    Luigi

  4. #4
    Le date in PHP sono UNIX timestamp, in pratica numeri, percui per fare:

    se la data $x è tra la data $y e la data $z, con $y < $z

    si fa:

    if($y < $x && $x < $z)

    se invece $y > $z

    if($y > $x && $x > $z)

  5. #5
    Originariamente inviato da artorius
    Le date in PHP sono UNIX timestamp, in pratica numeri, percui per fare:

    se la data $x è tra la data $y e la data $z, con $y < $z

    si fa:

    if($y < $x && $x < $z)

    se invece $y > $z

    if($y > $x && $x > $z)
    Vediamo se ho capito:

    $x = 23:55:00

    $y = 22:00:00
    $z = 06:00:00
    con $y < $z
    ma alla mezzanotte torna tutto a zero le 6 di mattina sono $z < $y ?????


    ho scritto questo codice; da quanto ho visto mi sono incartato di nuovo

    $orarioIni = split(":",trim($tmpServizi[$tmpInd2]['turno_ini']));
    $orarioFine = split(":",trim($tmpServizi[$tmpInd2]['turno_fine']));
    $nott_Ini = $orarioIni[2] + ($orarioIni[1]*3600) + ($orarioIni[2]*60);
    $nott_Fine = $orarioFine[2] + ($orarioFine[1]*3600) + ($orarioFine[2]*60);
    $ore22 = (22*3600);
    $ore6 = (6*3600);
    $ora24 = 86400; # mezzanotte 24° ora

    if($secIni == $secFine){ # non effettua il calcolo, gli orari sono uguali
    // calcolo ore notturne
    // il turno si conclude entro mezzanote;
    // pertanto a prescidere da quando è iniziato
    // calcoliamo le ore notturne dalle 22:00:00 a fine turno
    if(($nott_Fine >= $ore22) and ($nott_Fine <= $ora24)) {
    $start = strtotime($tmpServizi[$tmpInd2]['data'].' 22:00:00');
    $end = strtotime($tmpServizi[$tmpInd2]['data'].' '.$tmpServizi[$tmpInd2]['turno_fine']);

    }elseif((($nott_Ini >= $ore22) and ($nott_Ini <= $ora24)) and (($nott_Fine >= 0) and ($nott_Fine[0] <= 6))) { # il turno si conclude dopo mezzanotte
    // inizio turno prima di mezzanotte e dopo le 22, finisce max ore 6
    // es. ini 23:00:00 fine 05:00:00
    $start = strtotime($tmpServizi[$tmpInd2]['data'].' '.$tmpServizi[$tmpInd2]['turno_ini']);
    $end = strtotime($tmpServizi[$tmpInd2]['data'].' 23:59:59']);

    $start1 = strtotime($tmpServizi[$tmpInd2]['data'].' 00:00:00']);
    $end1 = strtotime($tmpServizi[$tmpInd2]['data'].' '.$tmpServizi[$tmpInd2]['turno_fine']);

    }elseif((($nott_Ini >= $ore22) and ($nott_Ini <= $ora24)) and (($nott_Fine >= 0) and ($nott_Fine[0] > 6))) { # il turno si conclude dopo mezzanotte
    // turno inizia prima di mezzanotte e dopo le 22, finisce dopo le ore 6
    // es. ini 23:55:00 fine 07:08:00
    $start = strtotime($tmpServizi[$tmpInd2]['data'].' '.$tmpServizi[$tmpInd2]['turno_ini']);
    $end = strtotime($tmpServizi[$tmpInd2]['data'].' 23:59:59']);

    // aggiungere 6 ore (da mezzanotte 00 alle ore 6)

    }elseif(($nott_Ini < $ore22) and (($nott_fine >= $ora22) or ($nott_fine <= $ora24))) { # il turno si conclude entro mezzanotte
    // turno inizia prima delle 22, finisce max ore 6
    // es. ini 17:00:00 fine 23:00:00

    $start = strtotime($tmpServizi[$tmpInd2]['data'].' 22:00:00');
    $end = strtotime($tmpServizi[$tmpInd2]['data'].' '.$tmpServizi[$tmpInd2]['turno_fine']);

    }elseif(($nott_Ini < $ore22) and (($nott_fine >= $ora24) or ($nott_fine <= $ora6))) { # il turno si conclude dopo mezzanotte
    // turno inizia prima delle 22, finisce max ore 6
    // es. ini 19:00:00 fine 01:00:00
    $start = strtotime($tmpServizi[$tmpInd2]['data'].' 00:00:00');
    $end = strtotime($tmpServizi[$tmpInd2]['data'].' '.$tmpServizi[$tmpInd2]['turno_fine']);
    // aggiungere 2 ore dalle 22 a 24 (mezzanotte )

    }elseif(($nott_Ini < $ore22) and (($nott_fine >= $ora24) or ($nott_fine > $ora6))) { # il turno si conclude dopo le 6
    // turno inizia prima delle 22, finisce dopo ore 6
    // es. ini 21:00:00 fine 07:00:00

    // aggiungere 2 ore dalle 22 a 24 (mezzanotte )
    // aggiungere 6 ore dalle 00 a 06
    }

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.