L'ultimo articolo scritto su Sir Bit risale a marzo 2014. La versione che state visitando è un archivio: le pagine sono accessibili come sempre e gli autori potrebbero rispondere ai commenti, ma non saranno inseriti dei nuovi articoli. Visita questa pagina per i dettagli.

PHP – Come controllare la data e l’ora e invertire il formato della data (funzioni complete)

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;
	}
}
Etichette
Etichette:, ,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.