All posts tagged Regular Expressions

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})/

POSIX Perl ASCII Description
[:alnum:] [A-Za-z0-9] Alphanumeric characters
[:word:] w [A-Za-z0-9_] Alphanumeric characters plus “_”
W [^w] non-word character
[:alpha:] [A-Za-z] Alphabetic characters
[:blank:] [ t] Space and tab
[:cntrl:] [x00-x1Fx7F] Control characters
[:digit:] d [0-9] Digits
D [^d] non-digit
[:graph:] [x21-x7E] Visible characters
[:lower:] [a-z] Lowercase letters
[:print:] [x20-x7E] Visible characters and spaces
[:punct:] [-!"#$%&'()*+,./:;<=>?@[\]_`{|}~] Punctuation characters
[:space:] s [ trnvf] Whitespace characters
S [^s] non-whitespace character
[:upper:] [A-Z] Uppercase letters
[:xdigit:] [A-Fa-f0-9] Hexadecimal digits
php_cheat_sheet

En el lloc The PHP Cheat Sheet es troba una xuleta de comandes de PHP i alguns dels seus mòduls.

Les columnes laterals estan plenes de funcions bàsiques de PHP agrupades per temàtica i algunes SuperGlobals.

I la part central amb els codis de formateig de dates, ajudes per a les genials Regular Expression, modus d’obertura d’arxius i ordre dels paràmetres d’algunes funcions.

Per agreïments per la feinada, visitar The PHP Cheat Sheet i deixar-li algun missatge.