Avevamo già affrontato in questo post la gestione di un evento in base al giorno della settimana, attraverso l'istruzione switch e la funzione date() di PHP.
In questo caso però le cose si complicano: occorre definire un array che contiene le due variabili (giorno della settimana date("w") ora e minuti date("H.i")) che devono essere utilizzate entrambe dall'istruzione switch per effettuare il confronto.
Per esempio se vogliamo attivare un evento in un certo arco di tempo di un determinato giorno della settimana, possiamo impostare delle condizioni simili a queste:
case ($oggi == 1 && $ora >= 08.30 && $ora <= 13.00):il codice subordinato a questo case verrà eseguito solo il lunedì dalle ore 8:30 alle ore 13:00.
Per gestire le festività annuali, abbiamo inserito in un array le date fisse. Per calcolare la Pasqua ci siamo avvalsi della funzione easter_date() che restituisce un timestamp Unix della data della Pasqua dal 1970 fino al 2037.
$pasqua = date("d-m", easter_date());Per calcolare la data della Pasquetta abbiamo aggiunto un giorno alla Pasqua con la funzione date_add().
$pasqua2 = date_create(date('d-m-Y', easter_date())); date_add($pasqua2, date_interval_create_from_date_string('1 day')); $pasquetta = date_format($pasqua2, 'd-m');Non resta che confrontare la data attuale con le date inserite nell'array con un ciclo foreach e condizionare, con un if/else, l'esecuzione di tutto il codice in base al risultato del confronto.
Per la demo abbiamo ipotizzato la gestione automatica di un avviso grafico e testuale della disponibilità del servizio di un'assistenza telefonica.
Questo è il codice completo:
<?php date_default_timezone_set('Europe/Rome'); $on = true; // cambiare con false nei giorni di chiusura per ferie $data = date("d-m"); $pasqua = date("d-m", easter_date()); $pasqua2 = date_create(date('d-m-Y', easter_date())); date_add($pasqua2, date_interval_create_from_date_string('1 day')); $pasquetta = date_format($pasqua2, 'd-m'); $festivi = array( // giorni festivi gg-mm '01-01', '06-01', $pasqua, $pasquetta, '25-04', '01-05', '02-06', '15-08', '01-11', '08-12', '25-12', '26-12' ); foreach ($festivi as $value) { if ($data == $value) $on = false; } if ($on == true) { $oggi = date("w"); $ora = date("H.i"); //orario hh.mm $orario = array($oggi, $ora); switch ($orario) { case ($oggi == 0): // domenica chiusura settimanale $outputTxt = "non è attiva"; $outputImg = "phone-off.png"; break; case ($oggi == 1 && $ora >= 08.30 && $ora <= 13.00): // lunedì orario mattina case ($oggi == 1 && $ora >= 15.00 && $ora <= 19.30): // lunedì orario pomeriggio $outputTxt = "è attiva"; $outputImg = "phone-on.png"; break; case ($oggi == 2 && $ora >= 08.30 && $ora <= 13.00): // martedì orario mattina case ($oggi == 2 && $ora >= 15.00 && $ora <= 19.30): // martedì orario pomeriggio $outputTxt = "è attiva"; $outputImg = "phone-on.png"; break; case ($oggi == 3 && $ora >= 08.30 && $ora <= 13.00): // mercoledì orario mattina case ($oggi == 3 && $ora >= 15.00 && $ora <= 19.30): // mercoledì orario pomeriggio $outputTxt = "è attiva"; $outputImg = "phone-on.png"; break; case ($oggi == 4 && $ora >= 08.30 && $ora <= 13.00): // giovedì orario mattina case ($oggi == 4 && $ora >= 15.00 && $ora <= 19.30): // giovedì orario pomeriggio $outputTxt = "è attiva"; $outputImg = "phone-on.png"; break; case ($oggi == 5 && $ora >= 08.30 && $ora <= 13.00): // venerdì orario mattina case ($oggi == 5 && $ora >= 15.00 && $ora <= 19.30): // venerdì orario pomeriggio $outputTxt = "è attiva"; $outputImg = "phone-on.png"; break; case ($oggi == 6): // sabato chiusura settimanale $outputTxt = "non è attiva"; $outputImg = "phone-off.png"; break; default: $outputTxt = "non è attiva"; $outputImg = "phone-off.png"; break; } } else { $outputTxt = "non è attiva"; $outputImg = "phone-off.png"; } ?>
Questo il codice per l'output:
<div>L'assistenza telefonica <?php echo $outputTxt; ?></div> <img src="img/<?php echo $outputImg; ?>" alt="telefono" />
Rimandiamo le possibili ulteriori applicazioni alla vostra fantasia.
Per approfondire l'argomento:
- PHP: easter_date - Manual
- PHP: DateTime::add - Manual
- PHP: DateInterval::createFromDateString - Manual
Ciao e grazie per il tuo intervento
RispondiEliminaCome posso modificare la font ed il colore del testo che appare?
Grazie
Ciao, prego.
EliminaPuoi assegnare al div che contiene l'output un id o una classe che formatterai con i CSS