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.
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.codice:((date("G") >= 22) && (date("G") <= 10))
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
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>=1Codice PHP:
<?php
echo $h=date('G');
if (10>=$h or $h>=22) {
echo 'OK';
}
?>
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.![]()