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
modificadores | ejemplo | resultado |
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
modificadores | ejemplo | resultado |
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
modificadores | ejemplo | resultado |
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
modificadores | ejemplo | resultado |
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
modificadores | ejemplo | resultado |
i - de "00" a "59" | <?php $ahora_es = date(i); ?> | $ahora_es = 24 |
Jugando con fechas: segundos
modificadores | ejemplo | resultado |
s - de "00" a "59" | <?php $ahora_es = date(s); ?> | $ahora_es = 16 |
Jugando con fechas: fechas completas
modificadores | ejemplo | resultado |
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
modificadores | ejemplo | resultado |
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 strftime | opciones 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") |