loader

Date Helper: Tool per la gestione delle date

Convertire date, sottrazioni addizioni non sarà un problema con uno snippet pronto all’uso: Date Helper.

Capita spesso leggere in giro per il web “Come sottrarre due date”, o più comunemente come aggiungere un numero di giorni ad una data, questo piccolo snippet si avvale di elementari strutture per effettuare le diverse operazioni messe a disposizione del programmatore.

Vediamo subito come implementare le funzionalità di questo tool.

La parte funzionale più interessante è la possibilità passare come parametro alle varie funzioni, una stringa o un timestamp, lo snippet provvede ad effettuare le conversioni al posto nostro.

Indichiamo subito alcune dipendenze: NESSUNA, esatto hai letto bene nessuna dipendenza è richiesta per questo snippet.

Partiamo con la prima funzione utile time_to_date(time=123456,format=’Y-m-d H:i:s’,add=0), analizziamo punto per punto

  • time: Passare un timestamp o la conversione ad intero di una data
  • format: Formato output desiderato
  • add: Paramentro intero, aggiunge a time un intervallo temporale

Riportiamo un piccolo esempio:

$data_attuale=time();
$formato='Y-m-d H:i:s';
$aggiungi_giorno=3600*24;

echo time_to_date($data_attuale,$formato,$aggiungi_giorno);

In questo modo avremo la data di oggi con l’aggiunta di 1 giorno che altro non è 3600*24 ossia: 60 secondi * 60 minuti = 1ore.

Un giorno è composto da 24 ore, quindi 24 ore * 3600 secondi = 86400 secondi da sommare all’orario attuale convertito a intero.

Abbiamo infine dichiarato che vorremo la nostra nuova data nel formato: ANNO-MESE-GIORNO ORA:MINUTI:SECONDI.

Vediamo che il nostro snippet si comporta egregiamente con poche e semplici direttive, ma il bello deve ancora arrivare…

Immaginiamo di dover avere il numero di giorni di differenza tra due date, e successivamente vogliamo avere tutte le date comprese tra i due estremi….

Pensa….

Sarebbe anche facile, ma scrivere ad ogni progetto tutte le direttive e/o includere on demand file non è sempre bello, è anche poco professionale.

Il tool fa il suo lavoro in modo egregio e perfetto includendolo solo nella index del progetto, vediamo insieme come funziona la days_array_diff…

function days_array_diff($dt1,$dt2,$format='Y-m-d'){
		$data=[];
		(is_numeric($dt1))?$dt1=date('Y-m-d H:i:s',$dt1):null;
		(is_numeric($dt2))?$dt2=date('Y-m-d H:i:s',$dt2):null;
		if(strtotime($dt2)<strtotime($dt1)){
			$t=$dt2;$dt2=$dt1;$dt1=$t;
		}
		$diff=diff_date($dt1,$dt2,'%a');
		$d1=new DateTime($dt1);
		for($i=0;$i<$diff;$i++){
			$data[]=$d1->add(new DateInterval('P1D'))->format($format);
		}
		return $data;

	}

La funzione in questione provvede a gestire la differenza tra due date e restituisce un’array contenente tutti i giorni dal più “vecchio” al più “recente”.

Possiamo infatti vedere come la nostra funzione adatti i parametri in base al dimensionamento, offrendo anche un confronto tra date per effettuare correttamente i calcoli.

Per recuperare il numero di giorni che intercorrono tra le due date (solo in questo caso) è possibile effettuare il count(result).

Solo Questo?

NO! Il nostro snippet non è solo questo, altre funzioni daranno all’utente l’informazione richiesta…

Doveroso ringraziamento alla filosofia d’approccio del framework CI, in quanto 2 funzioni sono state copiate dai suoi file helper.

5