Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Calcolo intervallo ore

  1. #1

    Calcolo intervallo ore

    ciao!
    ho un problema forse banale ma nn sono riuscito a risolverlo.
    alla pressione del bottone devo controllare se l'orario è compreso tra le 22 e le 10 e incaso eseguire una operazione.
    ora, come calcolare l'orario attuale è facile:
    Codice PHP:
    date('H');
    date('H:i'); // CON MINUTI 
    ma come faccio a vedere se è compreso in quell'iintervallo??
    a rigor di logica so che è una cretinata, solo che nn sono riuscito a metterlo per iscritto.

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453


    Codice PHP:
    if(in_array(date('H'),range(10,22)))

       
    //l'orario è compreso fra le 10 e le 22
     
    else
         
    //l'orario non è compreso 

  3. #3
    Originariamente inviato da ilvirgiliota
    intanto direi di usare date con "G" in modo che il numero è 2,4,15 e non 02,04,15;
    poi basta fare un



    Codice PHP:

    if((date("G") >= 22) && (date("G")<=10)){
    //esegui codice

    ok allora penso che il problema fosse nel fatto che usavo date con H invece che con G.
    grazie a entrambi!!

  4. #4
    ero sicuro funzionasse ma sto provando adesso e vedo che nn funziona.
    al submit del form:
    Codice PHP:
     echo date('G');
                        if ((
    date("G") >= 22) && (date("G") <= 10)) {
                            echo 
    'OK';
                        } 
    il primo echo mi da zero come orario (e penso sia giusto essendo mezzanotte e venti).
    però il banalissimo OK nn esce.
    nn so se il problema possa essere proprio la mezzanotte o lo è in generale.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Originariamente inviato da fermat
    ero sicuro funzionasse ma sto provando adesso e vedo che nn funziona.
    al submit del form:
    Codice PHP:
     echo date('G');
                        if ((
    date("G") >= 22) && (date("G") <= 10)) {
                            echo 
    'OK';
                        } 
    il primo echo mi da zero come orario (e penso sia giusto essendo mezzanotte e venti).
    però il banalissimo OK nn esce.
    nn so se il problema possa essere proprio la mezzanotte o lo è in generale.
    Hai provato con l'esempio che ti ho mostrato sopra?

  6. #6
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Chi ha ragione? Come quasi sempre accade la macchina! Se avvitassimo correttamente la testa sul collo potremmo facilmente accorgerci che, un numero intero x se maggiore di 22 non potrà mai essere anche minore di 10.
    codice:
    ((date("G") >= 22) && (date("G") <= 10))
    Perchè? perchè supponiamo sia vero, avremmo 22<x<10 ossia 22<10 che è assurdo. Ne consegue che il ramo "vero" dell'if non è mai eseguito.

    Soluzione
    Rispetto a quanto ti serve (vero su intervallo orario 22-10) puoi:
    1) modificare quanto indicato da RoTeam negando la condizione e limitando il range da 11 a 21 (dovendo includere gli estremi), sebbene fare ricorso agli array per un caso del genere è forse un po' eccessivo
    2)lavorare sulla negazione dell'intervallo 10<x<22

    ossia
    !(10<x<22) equivale a
    !(10<x and x<22) portiamo la negazione all'interno per cui neghiamo le due proposizioni e l'and diventa or
    !(10<x) or !(x<22) che negando gli operatori logici equivale a
    10>=x or x>=22

    Codice PHP:
    <?php
    echo $h=date('G'); 
    if (
    10>=$h or $h>=22) { 
         echo 
    'OK'
    }
    ?>
    Puoi anche utilizzare date('H') perchè, se anche ritorna una stringa 01, al momento del confronto, trovandosi la stringa in un contesto numerico è convertita da PHP in un int ossia avrai il confronto 10>=1

    http://it2.php.net/manual/en/language.types.string.php
    String conversion to numbers
    When a string is evaluated in a numeric context, the resulting value and type are determined as follows.

    If the string does not contain any of the characters '.', 'e', or 'E' and the numeric value fits into integer type limits (as defined by PHP_INT_MAX), the string will be evaluated as an integer. In all other cases it will be evaluated as a float.
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  7. #7
    ok questo pare funzionare:
    Codice PHP:
    <?php
    echo $h=date('G'); 
    if (
    10>=$h or $h>=22) { 
         echo 
    'OK'
    }
    ?>
    e soprattutto grazie mille per la spiegazione.
    in effetti avevo un pò sbagliato la logica iniziale!!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.