dimecres, 10 de juny del 2009

Girant dates timestamp de MySQL a Pantalla i viceversa

Amb aquesta funció de quatre línies de codi, aconseguirem girar una data Timestamp, data + hora, tant si ens arriba en format MySQL yyyy-mm-dd hh:ii:ss com si ens arriba de pantalla en format europeu dd/mm/yyyy hh:ii:ss


/**
* Girem una data/hora en format MySQL a *EUR i viceversa
*
* @param string $timestamp
* @return string
*/
function giraTimestamp($data)
{
/**
* Mirem que la cadena compleixi amb els requisits de :
* entre 1 i 4 posicions decimals
* seguit d'un separador vàlid
* seguit d'entre 1 i 2 posicions decimals
* seguit d'un separador vàlid
* seguit d'entre 1 i 4 posicions decimals
* seguit d'un espai
* seguit d'entre 1 i 2 posicions decimals
* seguit d'un separador :
* seguit d'entre 1 i 2 posicions decimals
* seguit d'un separador : o no, doncs els segons no són obligatoris
* seguit d'entre 0 i 2 posicions decimals
*
* guardant-nos les xifres d'any, mes i dia i la data complerta
*/
if (preg_match('/(\d{1,4})[\-\/\.](\d{1,2})[\-\/\.](\d{1,4})\s(\d{1,2}\:\d{1,2}\:?\d{0,2})/', $data, $jData))
{
/**
* Esborrem la primera possició de l'array resultant que és la cadena
* que s'ha parsejat.
*/
array_shift($jData);

/**
* Extraiem de l'array l'hora:minut:segon
*/
$jHora = array_splice($jData, 3);

/**
* Si la primera xifra te 4 posicions, vol dir que venim de
* MySQL, i representarem la data girada amb / com a separador
* En cas contrari, vol dir que venim de pantalla, i el
* separador serà l'standard de MySQL.
*/
if (strlen($jData[0]) == 4)
{
$separador = '/';
}
else
{
$separador = '-';
}

/**
* Retornem la data
*
* girem l'array que conté any,mes,dia o dia,mes,any
* la convertim a una cadena separant cada element pel separador calculat
* afegim espai blanc i l'hora complerta
*/
$ret = implode($separador, array_reverse($jData)) . ' ' . $jHora[0];

return $ret;
}
}


Per als camps de tipus date, que no tenen l'hora, la cadena de parseig serà:


/(\d{1,4})[\-\/\.](\d{1,2})[\-\/\.](\d{1,4})/