Se vi è capitato di creare un pannello di amministrazione, anche semplice, dove l’utente può inserire dei campi data (per esempio nella gestione delle news), allora vi sarete trovati di sicuro nella situazione di generare dei controlli per evitare errori da parte di terzi.
La questione è ancora più complicata se la data deve essere salvata nel campo di un database: abituati come siamo alla data europea (per capirci, del formato gg-mm-aaaa), sarebbe fuorviante chiedere all’utente di scrivere la data in ordine invertito (aaaa-mm-gg), così come deve essere salvata nel database. Causerebbe ulteriori errori e frustrazioni da parte sua.
Dobbiamo poi considerare la situazione in cui l’utente inserisca la data separando i componenti con uno slash (/) anziché con un trattino (-) e prepararci di conseguenza alla sostituzione.
Con queste premesse, riporto qui sotto tre funzioni utili per il controllo e la formattazione della data e dell’ora. Sono funzioni semplici da capire e che si adattano a gran parte delle situazioni. Ogni riga, comunque, è opportunamente commentata.
Download script
Invertire la data
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
/* Inverte il giorno e l'anno di una data passata; la data può essere passata con l'ora */ function inverti_data($variabile){ //se la lunghezza della data è maggiore di 10, allora è presente l'ora e //suddivide la data e l'ora in due stringhe diverse if(strlen($variabile)>10){ $data_iniziale=substr($variabile, 0, 10); $ora=substr($variabile, 11); }else $data_iniziale=$variabile; //sostituisce lo slash con il trattino $data_iniziale=str_replace("/", "-", $data_iniziale); //separa i componenti della data in array, usando il trattino come elemento //separatore, quindi inverte l'anno con il giorno $vet=explode("-", $data_iniziale); $data_finale=$vet[2]."-".$vet[1]."-".$vet[0]; //se era presente l'ora, l'aggiungo alla data modificata if(isset($ora)) $data_finale.=" ".$ora; return $data_finale; } |
Controllo del formato della data
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
/* Controlla che la data sia della forma gg-mm-aaaa */ function data_inserimento($variabile){ //sostituisce lo slash con il trattino $variabile=str_replace("/", "-", $variabile); //controlla che la data sia formattata secondo lo standard gg-mm-aaaa; in tal caso //continua con i controlli, altrimenti restituisce false ed esce dalla funzione if(preg_match("#^\d{2}-\d{2}-\d{4}$#",$variabile)){ //separa i componenti della data in array, usando il trattino come elemento //separatore, quindi usa la funzione checkdate per controllarli $data=explode("-",$variabile); if(checkdate($data[1],$data[0],$data[2])) return true; else return false; }else{ return false; } } |
Controllo del formato dell’ora
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
/* Controlla l'inserimento dell'ora */ function ora_inserimento($variabile){ $lenght=strlen($variabile); //considera il caso in cui nell'ora siano presenti o meno i secondi; //in base a questo saranno fatti controlli diversi if( ($lenght==8 and preg_match("#^\d{2}:\d{2}:\d{2}$#", $variabile)) or ($lenght==5 and preg_match("#^\d{2}:\d{2}$#", $variabile)) ){ //separa i componenti della data in array, usando i due punti come elemento separatore $ora_arr=explode(":", $variabile); //controllo che i secondi siano in un range tra 0 e 59 if($lenght==8 and ($ora_arr[2]<0 or $ora_arr[2]>60)) return false; //controllo ora (range tra 0 e 23) e minuti (range tra 0 e 59) if($ora_arr[0]>=0 and $ora_arr[0]<24 and $ora_arr[1]>=0 and $ora_arr[1]<60) return true; else return false; }else{ return false; } } |