Devo verificare se nella giornata odierna è stata superata l'ora delle 9:30.
Come posso fare un differenza tra date considerando anche l'orario rispetto all'attuale?
grazie
Devo verificare se nella giornata odierna è stata superata l'ora delle 9:30.
Come posso fare un differenza tra date considerando anche l'orario rispetto all'attuale?
grazie
Utilizza la funzione date,
visualizzi la data e l'ora odierna e la confronti se ha superato le 9.30.
Semplice fai cosi:
In questo modo appena l'orario supera le 9.30 cambia azione!Codice PHP:
<?php
$data_attuale = (date("G:i"));
if ($data_attuale > 9.30) {
echo "Sono passate le 9.30";
} else {
echo "Ancora non sono passate le 9.30";
}
?>
![]()
Ma confronti l'ora attuale nel formato 8:30 con il formato 9.30?
Io ho utilizzato il timestamp.
Ho trasformato l'ora attuale con mktime() e poi settato l'ora limite sempre con il mktime().
Dopodichè le ho confrontate.
Ho fatto così perchè è necessario verificare che l'orario passato sia quello della data odierna, mentre per il giorno no.
Il confronto tra stringhe cmq e' lecita in questa situazione ... sol che le stringhe orarie devono avere lo stesso formato 9.30 non e' una stringa, e' un numero decimale .... controlla con la stringa "9:30" altrimenti come suggerito usa le timestamp ( cosa che faccio sempre anche io perche' il controllo e' piu' flessibile inoltre ti consente di gestire meglio i tipi date, time e datetime )
Ho notato che la differenza di orario usando il timestamp non funziona correttamente. Credo che il problema sia dovuto all'ora legale?
Questo il codice:
Premesso che la data avrà formato 2010-09-30Codice PHP:
// Verifica se l'orario massimo di prenotazione è passato e setta la variabile per il controllo
$data_ora_attuale = mktime();
if ($id_pasto == 1) { // Pranzo
$data_ora_impostata = mktime(08,45,0,substr($data,5,2),substr($data,-2),substr($data,0,4));
} else { // Cena
$data_ora_impostata = mktime(08,30,0,substr($data,5,2),substr($data,-2),substr($data,0,4));
}
if (($data_ora_attuale - $data_ora_impostata) < 0) {
$flgInOrario = true;
$nota = "";
} else {
$flgInorario = false;
$nota = "<p class=\"nota\" style=\"color:#F00\">Prenotazione fuori orario! (08:30 per Cena e 08:45 per Pranzo)</p>";
}
Ho provato alle ore 9:10:30 del 30/09/2010 a lanciare:
Il risultato è questo:Codice PHP:
$data_ora_attuale = mktime();
$data_ora_attuale2 = mktime(09,10,30,9,30,2010);
attuale: 1285830632
attuale2: 1285798230
Come è possibile che ci sia questa differenza?
Il numero dovrebbe essere uguale!
1285830632 - 1285798230 = 32402 secondi di differenza
se divido per 3600 ottengo le ore
32402 / 3600 = 9 ore di differenza
Perchè?
Ho risolto: il problema è che scrivevo così:
In fatti da manuale su internet http://www.php.net/manual/en/function.mktime.php l'ora dovrebbe essere con lo zero davanti per quello inferiori a doppia cifra.Codice PHP:
$data_ora_impostata = mktime(08,45,0,substr($data,5,2),substr($data,-2),substr($data,0,4));
Questo invece non è vero. Scrivendo infatti così:
Viene corretto.Codice PHP:
$data_ora_impostata = mktime(8,45,0,substr($data,5,2),substr($data,-2),substr($data,0,4));
Inoltre in questo caso non dovrei nemmeno avere problemi di fuso orario in quanto il controllo lo faccio con lo stesso fuso.