Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    258

    Elaborare orario inizio e fine

    Salve, devo poter eseguire delle azioni in base ad un orario. L'utente tramite un form andr� a salvare un orario iniziale e finale. Avevo pensato di creare di campi input time, in modo da ricevere gli orario in questo formato: inizio 18:00 fine 23:00. Ora io devo riuscire ad elaborare il range di orario. Faccio un esempio:

    Codice PHP:

    $inizio    
    trim($_POST['inizio']);$fine    trim($_POST['fine']);
    $min "06:00";$max "22:00";
    if (
    $inizio $min && $inizio $max) {echo 'Sei nel range';} else {echo 'Sei fuori dal range';} 
    A me oltre che a individuare se sono dentro al range di orari, mi serve estrapolare anche quante ore vanno fuori.

    Esempio, l'utente salva 18:00 - 23:00 a mese serve sapere che sono 6 ore di cui 5 nel range da me impostato, e 1 fuori.

    Come potrei fare?

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Una soluzione in pseudocodice, visto che si tratta solo di un problema di logica.

    Se $inizo >= $min e $fine <= $max
    - calcola la differenza di ore tra $inizio e $fine -> ore totali tutte in range

    Se $inizo < $min e ($fine >= $min e $fine <= $max)
    - calcola la differenza di ore tra $inizio e $fine -> ore totali
    - calcola la differenza di ore tra $inizio e $min -> ore fuori range
    - calcola la differenza di ore tra ore totali e ore fuori range -> ore in range

    e così via tutti i casi possibili:
    $inizio e $fine tutti e 2 precedenti a $min
    $inizio e $fine tutti e 2 successivi a $max
    $inizio in range e $fine oltre $max

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    258
    Ciao grazie per avermi risposto. Lavorare con date e ora, mi ha creato sempre problemi. Quello che non riesco a capire, posso lavorare direttamente sul formato 00:00 oppure devo convertirlo in minuti? se non ti chiedo troppo puoi farmi un piccolo esempio, cosi da poterlo studiare?

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    258
    Ciao, facendo alcune prove non riuscito ad avere un script funzionante, vorrei qualche parere, se va bene cosi oppure potrebbe essere migliorato. Posto il codice prodotto:

    Codice PHP:
    <?php
    // Orari range
    $inizio    = ('22:00')*60;
    $fine    = ('06:00')*60;
    // Costi
    $costo_diurno '11,54';    //�
    $costo_notturno '13,04';  //�
    $costo_festivo '15,05';   //�

    $turno_inizio trim($_POST['inizio'])*60;
    $turno_fine trim($_POST['fine'])*60;
    //$turno_inizio = ('05:30')*60; // inzio 19:00
    //$turno_fine = ('12:00')*60;// fine 23:15
    // Condizione che si verifica se tuno_inizio e fine si trova tra 06:00 e 22:00 es. 12:00 - 18:00
    if ($turno_inizio >= $fine && $turno_fine <= $inizio){
     
    // Operazioni da fare
     
    $xx = ($turno_fine $turno_inizio)/60;
     
    $nn '0';
     
    $fe '0';
     
    $cd number_format($xx $costo_diurno,2,'.','');
     
    $cn '0';
     
    $cf '0';
    }
    // Condizione che si verifica se tuno_inizio e fine si trova tra 22:00 e 06:00 es. 01:00 - 03:00
    if  ($turno_inizio >= $inizio && $turno_fine <= $fine) {
     
    // Operazioni da fare
     
    $xx = (1440 $turno_inizio $turno_fine)/60;
     
    $nn "0";
     
    $fe '0';
     
    $cd '0';
     
    $cn number_format($xx $costo_notturno,2,'.','');
     
    $cf '0';
    }
    // Condizione che si verifica se tuno_inizio e fine si trova accavallo di 22:00 e 06:00 es. 19:00 - 23:00
    if  ($turno_inizio <= $inizio && $turno_fine >= $inizio) {
     
    // Operazioni da fare
     
    $xx = (1320 $turno_inizio)/60;
     
    $nn = ($turno_fine 1320)/60;
     
    $fe '0';
     
    $cd number_format($xx $costo_diurno,2,'.','');
     
    $cn number_format($nn $costo_notturno,2,'.','');
     
    $cf '0';
    }
    // Condizione che si verifica se tuno_inizio e fine si trova accavallo di 06:00 e 22:00 es. 05:00 - 10:00
    if  ($turno_inizio <= $fine && $turno_fine >= $fine) {
     
    // Operazioni da fare
     
    $xx = ($turno_fine 360)/60;
     
    $nn = (360 $turno_inizio)/60;
     
    $fe '0';
     
    $cd =  number_format($xx $costo_notturno,2,'.','');
     
    $cn =  number_format($nn $costo_diurno,2,'.','');
     
    $cf '0';
    }
    $return = array(
     
    'a' => $xx,
     
    'b' => $nn,
     
    'c' => $fe,
     
    'd' => $cd,
     
    'e' => $cn,
     
    'f' => $cf
    );

    $json json_encode($return);
    echo 
    $json;
    ?>
    Devo apportare le seguenti correzioni: Fare il calcolo non solo delle ore, ma anche dei minuti, esempio calcolare anche 15:35. Come potrei fare ? ho provato con number_format ma non funziona come vorrei.

    Qui trovare un esempio online: http://www.turnips.it/strao.php

    Accetto qualsiasi consiglio.

    Grazie

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.