Cuando desarrollamos una página web o un programa, la fecha y hora en php es algo imprescindible ya sea para algo tan sencillo para la parte del usuario como guardar la fecha y hora en un formato correcto para mysql. PHP ofrece una serie de funciones y constantes para tratar diferentes formatos de fecha y hora.
La función time
La función time indica el número de segundos desde la fecha del 1 de enero de 1970. Esto es debido a que PHP emplea timestamps de Unix. Si quisierámos determina el timestamp actual con al fucnión time()
1 |
echo time(); |
Si empleamos la función time(), cómo podríamos obtener el timestamp de un período de terminado? Habría que multiplicar el número de días que queremos sumar o restar por las 24 horas que tiene un día por los 60 minutos que tiene una hora y por los 60 segundos que tiene un minuto. Por ejemplo si queremos el timestamp de dentro de 1 mes
1 |
echo time() + 30 * 24 * 60 * 60; |
Si se diera el caso de crear un timestamp con una fecha en concreto, podemos emplear mktime(). Los parámetros que acepta esta función son (de izquierda a derecha):
- El número de la hora (0–23)
- El minute (0–59)
- Los segundos (0–59)
- El número del mes (1–12)
- El número del día (1–31)
- El año (1970–2038, o 1901–2038 en PHP 5.1.0+ en sistemas de 32-bit). Esto me recuerda al famoso bug Y2K38 el cuál sería otro «efecto 2000». Y por qué? Bueno, los desarrolla dores de Unix no eran tan optimistas y pensaron que el S.O. no duraría más de 70 años.
1 |
echo mktime(13, 59, 2, 10, 26, 2017); |
Obtener fecha y hora en php con date()
Si queremos mostrar la fecha actual podemos emplear la función date() que permite diversos parámetros para adaptarlo al formato que deseemos. Acepta como parámetros un formato en string que contiene especificadores (algo parecido que printf) y un timestamp en Unix. Estos son algunos delos especificadores más usados
Formato | Descripción | Valor devuelto |
---|---|---|
Especificadores de días | ||
j | Número del día sin 0 | 1 a 31 |
N | Día de la semana numérico(lunes a domingo) | 1 al 7 |
w | Día de la semana pero de domingo a sabado | 0 al 6 |
z | Día del año | 0 a 365 |
Especificadores de semana | ||
w | Número de la semana de un año | 01 a 52 |
Especificadores de mes | ||
n | Número del mes | 1 a 12 |
t | número de días de un mes en concreto | 28 a 31 |
Especificadores de año | ||
y | Año en 2 dígitos | 00 a 99 |
Y | Año en 4 dígitos | 0000 a 9999 |
Especificadores de hora | ||
g | hora del día en formato 12 | 1 a 12 |
G | Hora en formato 24 horas | 00 a 23 |
i | Minutos con ceros | 00 a 59 |
s | Segundos con ceros | 00 a 59 |
Una vez sabemos qué especificadores cuenta la función date() procedo con un ejemplo. La fecha a mostrar será la de hoy con un formato como este: 02/10/2017 *** 18:00
1 |
echo date("j/n/Y **** G:i"); |
Como comenté antes, también se acepta un timestamp, en este caso voy a poner el timestamp de dentro de una semana.
1 |
echo date("j/n/Y **** G:i", time() + 7 * 24 * 60 * 60;); |
Constantes
Hay una serie de constantes que con la función date(), podemos devolverla fecha y hora en PHP con diferentes formatos.
DATE_ATOM
Si quieres la fecha y hora en formato Atom feed. Por ej:»2018-08-16T12:00:00+00:00″ .
DATE_COOKIE
Sigue el formato de una cookie de web server o javascript. Ej: «Thursday, 16-Aug-18 12:00:00 UTC»
DATE_RSS
Basándose en el formato de feed RSS. Ej: «Thu, 16 Aug 2018 12:00:00 UTC».
DATE_W3C
Sigue el formato según el W3C(World Wide Web Consortium). Ej: «2018-08-16T12:00:00+00:00» .
Validar una fecha con checkdate()
Hay muchos formatos para mostrar una fecha válida pero, cómo comprobar si un usuario envía una fecha válida a través de los datos de un formulario? Mediante checkdate podemos comprobar si una fecha es válida sin embargo, tenemos que pasarle el mes, año y día por separado. Esta función devolverá TRUE si la fecha válida y FALSE en caso den o serlo.
Por ejemplo, el día 30 es completamente válido en un formulario pero con febrero no es así, ya que dispone de 28 (29 si es año bisiesto). Por tanto, si alguien introduce el 30-02-2018 sería inválido.
1 2 3 4 5 6 7 8 |
$mes = 2; $dia = 30; $year = 2018; if (checkdate($mes, $dia, $year)) echo "La fecha es válida"; else echo "La fecha no es válida"; |
Esto incluso tiene en cuenta los años bisiestos, lo cual te puede ahorrar muchos quebraderos de cabeza si tienes que validar una fecha.
Y hasta aquí la cómo mostrar la fecha y hora en php, espero que os haya gustado. A seguir picando 😉