PHP – Sapere di quale giorno della settimana è un determinata data.

Il Php non mette a disposizione una funzione che consente di ricavare da una data il giorno della settimana della data stessa.
Però utilizzando le due funzione mktime() e getdate() possiamo ottenere il risultato desiderato.
 
La funzione Php mktime può() gestire fino a 6 parametri tutti opzionali che sono interi che rappresentano rispettivamente ore, minuti, secondi, mese, giorno, anno.
Questa funzione restituisce un numero intero che rappresenta in secondi passati dalle 0:00:00 del primo gennaio 1970, questo numero che è univoco per ogni data/ora è detto Unix timestamp.

Ecco un esempio di utilizzo:

echo mktime(0, 0, 0, 7, 1, 2000);
//stampa l'unix timestamp del 1 luglio del 2000
//fare attenzione non è 7 gennaio!

 
Una piccola precisazione per ottenere il timestamp dell’ora attuale non si usa mktime() senza paramentri ma si usa la funzione time()
 
A questo punto possiamo utilizzare la funzione getdate(), questa funzione prende come parametro un numero che rappresenta un timestamp e restituisce un array associativo contentente informazioni riguardanti la data rappresentata dal timestamp.
Per una panoramica completa di questa funzione possiamo fare rifermento alla pagina della funzione sul manuale del php.
Quello che a noi interessa è la cella dell’array con indice wday. In questo indice è contenuto un numero da 0 a 6, il numero è 0 se il giorno del timestamp è domenica e 6 se è sabato.
Ora abbiamo tutti i pezzi per costruire la nostra funzione giornoData():

function giornoData($g,$m,$a){
	$gShort = array('Dom','Lun','Mart','Merc','Giov','Ven','Sab');
	$ts = mktime(0,0,0,$m,$g,$a);
	$gd = getdate($ts);
	echo $gShort[$gd['wday']];
}

Questa funzione stampa il giorno, possiamo cambiarla in modo che ritorni il giorno o l’indice:

function giornoData($g,$m,$a){
	$gShort = array('Dom','Lun','Mart','Merc','Giov','Ven','Sab');
	$ts = mktime(0,0,0,$m,$g,$a);
	$gd = getdate($ts);
	return $gShort[$gd['wday']];
	// return $gd['wday']; ritorna l'indice del giorno compreso tra 0 e 6
}