Inicio

jueves, 4 de agosto de 2011

Trabajando con fechas

Para mostrar la fecha completa en PHP tenemos dos opciones, que podremos manejar despues convenientemente para presentar otros formatos según las necesidades.
La más práctica si es que vamos a escribir en español, es registrar las variables locales a nuestro idioma con la línea siguiente:

setlocale(LC_ALL,"es_ES@euro","es_ES","esp");

Así podemos escribir la fecha larga directamente:
<?php
setlocale(LC_ALL,"es_ES@euro","es_ES","esp");
echo "Sevilla, ".strftime("%A %d de %B del %Y");
?>
Una alternativa sería declarar sendas arrays para los dias de la semana y de los meses. Y variables para el resto de conceptos por ejemplo:
<?php
$dia=array("domingo","lunes","martes","miércoles","jueves","viernes","sábado");
$mes=array("enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre");
$numdia=date(w);//muestra el día de la semana
$nummes=date(n);
$diames=date(j);//muestra el día del mes
$anho=date(Y);
echo "Hoy es $dia[$numdia],$diames de $mes[$nummes] del $anho  ";

?>

A partir de aquí se puede formar multitud de combinaciones


modificadoresejemploresultado
d - día del mes, número, dos dígitos <?php $ahora_es date(d);  ?> $ahora_es = 04
j - día del mes, número, dos dígitos sin cero inicial <?php $ahora_es date(j);  ?> $ahora_es = 4
D - dia semana abreviado letras <?php $ahora_es date(D);  ?> $ahora_es = Thu
l - día de la semana, en texto, completo <?php $ahora_es date(l);  ?> $ahora_es = Thursday
w - día de la semana, en numero
(comienza en 0 = domingo)
<?php $ahora_es date(w);  ?> $ahora_es = 4

Jugando con fechas: el mes

modificadoresejemploresultado
m - mes, número, dos dígitos <?php $ahora_es date(m);  ?> $ahora_es = 08
n - mes, número, dos dígitos sin cero inicial <?php $ahora_es date(n);  ?> $ahora_es = 8
M - mes, tres letras <?php $ahora_es date(M);  ?> $ahora_es = Aug
F - mes, texto completo <?php $ahora_es date(F);  ?> $ahora_es = August
t - total dias en el mes <?php $ahora_es date(t);  ?> $ahora_es = 31

Jugando con fechas: el año

modificadoresejemploresultado
Y - año, cuatro cifras <?php $ahora_es date(Y);  ?> $ahora_es = 2011
y - año, dos cifras <?php $ahora_es date(y);  ?> $ahora_es = 11
L - bisiesto? <?php $ahora_es date(L);  ?> $ahora_es = 0
0 = no; 1 = si
z - día del año <?php $ahora_es date(z);  ?> $ahora_es = 215
W - semana del año <?php $ahora_es date(W);  ?> $ahora_es = 31

Jugando con fechas: la hora

modificadoresejemploresultado
h - hora, de "01" a "12" <?php $ahora_es date(h);  ?> $ahora_es = 02
g - sin ceros, de "1" a "12" <?php $ahora_es date(g);  ?> $ahora_es = 2
H - hora, de "00" a "23" <?php $ahora_es date(H);  ?> $ahora_es = 14
G - sin ceros, de "0" a "23" <?php $ahora_es date(G);  ?> $ahora_es = 14
a - "am" o "pm"
A - "AM" o "PM"
<?php $ahora_es date(a);  ?> $ahora_es = pm

Jugando con fechas: minutos

modificadoresejemploresultado
i - de "00" a "59" <?php $ahora_es date(i);  ?> $ahora_es = 24

Jugando con fechas: segundos

modificadoresejemploresultado
s - de "00" a "59" <?php $ahora_es date(s);  ?> $ahora_es = 16

Jugando con fechas: fechas completas

modificadoresejemploresultado
U segundos desde EPOCH
epoch = 1 enero 1970
<?php $ahora_es date(U);  ?> $ahora_es = 1312493056
r - formato RFC 2822 <?php $ahora_es date(r);  ?> $ahora_es = Thu, 04 Aug 2011 14
c - formato ISO 8601 (solo en PHP 5) <?php $ahora_es date(c);  ?> N/A

Jugando con fechas: varios

modificadoresejemploresultado
S sufijo en texto, 2 caracteres; por ejemplo, "th", "nd" <?php $ahora_es date(jS);  ?> $ahora_es = 4th
I - horario de verano <?php $ahora_es date(I);  ?> $ahora_es = 1
0 = no 1 = si
O - diferencia con hora Greenwich <?php $ahora_es date(O);  ?> $ahora_es = -0700
T - zona horaria del server <?php $ahora_es date(T);  ?> $ahora_es = PDT
Z diferencia en segundos zona horaria <?php $ahora_es date(Z);  ?> $ahora_es = -25200
B swatch internet time <?php $ahora_es date(B);  ?> $ahora_es = 933

Comprobando fechas

checkdate(nMes nDia nAño) nos permite chequear si una fecha dada es posible: es decir, que no se trata del dia 32 del mes 13.
checkdate tiene en consideración años bisiestos, y es valido para un rango de años desde 0 a 32767

Y para mas flexibilidad, strftime()

la función date(), tan flexible como es, presenta dos problemas: no admite localización a idiomas distintos del inglés. Y si quieres emplear caracteres adicionales debes salvarlos
:
<?php
print date("j \de F \de Y");  // como la "d" equivale al  "dia" en número, 
                              // si queremos que imprima una letra d y no el numero de mes,
                              // debemos emplear la barra \. 
                              // no serviria escribir "j de F de Y"
?>
Sin que tampoco hayamos ganado mucho en estetica, ya que "4 dAmerica/Los_Angeles August dAmerica/Los_Angeles 2011" no queda muy bien. La solución pasa por indicar el mes en número y no en letra ... o usar strftime:
Hoy es jueves, 4 de agosto de 2011.
<?php
setlocale
(LC_TIME,"es_ES");
echo 
strftime("Hoy es %A, %e de %B de %Y." ,time());  ?>
y estas son las opciones de formato. A la derecha añadimos las equivalentes de date():
opciones de strftimeopciones de date
%a dia semana (abreviado) a "am" o "pm"
%A dia semana (completo) A "AM" o "PM"
%b nombre mes (abreviado) b -
%B nombre mes (completo) B Swatch Internet time
%c representación preferida de dia y hora segun idioma del server c -
%C año en numero (00 - 99) C -
%d numero dia del mes (01 a 31) d numero dia del mes (01 a 31)
%D fecha abreviada, segun idioma server (%m/%d/%y, %y/%m/%d or %d/%m/%y) D dia de la semana, tres letras
%e dia del mes en numero (' 1' - '31') %e -
%F - F mes, en texto, completo; por ejemplo, "January"
%g - g hora, sin ceros, de "1" a "12"
%G - G hora, sin ceros; de "0" a "23"
%h igual que %b h h - hora, de "01" a "12"
%H hora, de "00" a "23" H hora, de "00" a "23"
%I hora como un número de 01 a 12 I -
%i - i minutos; de "00" a "59"
%j día del año como un número de 001 a 366 j día del mes sin cero inicial; de "1" a "31"
%l - l día de la semana, en texto, completo; por ejemplo, "Friday"
%L - L "1" o "0" segun el año sea bisiesto o no
%m mes como un número de 01 a 12 m mes: de "01" a "12"
%M minuto en numero M mes, en texto, 3 letras; por ejemplo, "Jan"
%n nueva linea n mes sin cero inicial; de "1" a "12"
%N - N -
%p 'am' o 'pm', según la hora dada, o las cadenas correspondientes en el idioma actual p
%r hora am pm r -
%R hora en formato 24 horas R -
%S segundos en número S sufijo ordinal en inglés, en texto, 2 caracteres; por ejemplo, "th", "nd"
%s - s segundos en numero
%t tabulador t número de días del mes dado; de "28" a "31"
%T Hora actual T -
%U segundos desde epoch U segundos desde epoch
%w día de la semana en número (el domingo es el 0) w día de la semana, en número (el domingo es el 0)
%W número de la semana en el año, empezando con el primer lunes como el primer día de la primera semana W -
%x representación preferida de la fecha sin la hora x -
%X representación preferida de la hora sin la fecha X -
%y año en número de 00 a 99 y año en número de 00 a 99
%Y año en número de cuatro cifras Y año en número de cuatro cifras
%z - z día del año; de "0" a "365"
%Z nombre o abreviatura de la zona horaria Z diferencia horaria en segundos (de "-43200" a "43200")

No hay comentarios:

Publicar un comentario