Introducción
Las fechas en PHP son una cosa a la que todo programador se enfrenta algún día.
Hoy veremos cómo extraer año, mes o día de alguna fecha en PHP.
Esto sirve cuando tenemos determinada fecha y queremos conocer únicamente algún dato (mes, día, hora, minutos).
Extraer año, mes o día de alguna fecha en PHP
Representación entera, no como cadena
Como primer paso debemos tener la fecha en formato entero, es decir, que represente los segundos transcurridos desde la fecha Unix.
Si tenemos una fecha como cadena, por ejemplo “2018-07-30T20:55:20” podemos obtener su representación entera con strtotime, así:
<?php
$fecha = "2018-07-30T20:55:20";
$fechaComoEntero = strtotime($fecha);
Y si sólo queremos saber la fecha actual, utilizamos la función time
que devuelve el tiempo transcurrido desde la época Unix hasta el día de hoy (con segundos y minutos y todo eso).
Una vez que ya tenemos nuestra fecha como entero, es hora de obtener lo que necesitamos.
Formateando para obtener valores
PHP proporciona otra función llamada date que recibe como primer argumento el formato que queremos aplicar a una fecha, y como segundo argumento recibe el tiempo transcurrido desde la época Unix representado como segundos.
Los formatos pueden verse en la documentación oficial, pero aquí sólo vamos a extraer valores.
Obtener o extraer año
Para obtener el año con cuatro dígitos, hacemos esto:
<?php
/*
Asumimos que $fechaComoEntero es
como su nombre lo dice una variable entera, que
calculamos con los ejemplos mostrados arriba
*/
$anio = date("Y", $fechaComoEntero);
Lo que da una salida como 2017, 2018, etcétera. Utilizamos la letra Y mayúscula que nos da precisamente el año.
Obtener o extraer mes
<?php
/*
Asumimos que $fechaComoEntero es
como su nombre lo dice una variable entera, que
calculamos con los ejemplos mostrados arriba
*/
$mes = date("m", $fechaComoEntero);
En este caso usamos al modificador m. Devuelve un entero desde el 0 hasta el 11. El cero representa a enero y el 11 a diciembre.
Obtener o extraer día
<?php
/*
Asumimos que $fechaComoEntero es
como su nombre lo dice una variable entera, que
calculamos con los ejemplos mostrados arriba
*/
$dia = date("d", $fechaComoEntero);
Ahora utilizamos d
. Esto regresa un valor entre 1 y el número de días que tenga el mes de la fecha (no es como el del mes que empieza desde cero).
El valor regresado incluye ceros a la izquierda. Por ejemplo 01, 02, etcétera.
Obtener o extraer hora
Para esto utilizamos H así:
<?php
/*
Asumimos que $fechaComoEntero es
como su nombre lo dice una variable entera, que
calculamos con los ejemplos mostrados arriba
*/
$hora = date("H", $fechaComoEntero);
La hora es devuelta con valores desde 00 hasta 23. Es decir, las 0 horas son las 12 de la noche y las 23 son las 11 de la noche. Notar por favor que devuelve la hora con ceros a la izquierda.
Minutos y segundos
Para los minutos y segundos utilizamos i
y s
respectivamente:
<?php
/*
Asumimos que $fechaComoEntero es
como su nombre lo dice una variable entera, que
calculamos con los ejemplos mostrados arriba
*/
$minutos = date("i", $fechaComoEntero);
$segundos = date("s", $fechaComoEntero);
Cabe mencionar que ambos valores van de 00 hasta 59 y que son devueltos con ceros a la izquierda.
Ejemplo completo
He aquí un ejemplo completo de la fecha “2018-07-30T20:55:20”:
<?php
$fecha = "2018-07-30T20:55:20";
$fechaEntera = strtotime($fecha);
$anio = date("Y", $fechaEntera);
$mes = date("m", $fechaEntera);
$dia = date("d", $fechaEntera);
$hora = date("H", $fechaEntera);
$minutos = date("i", $fechaEntera);
$segundos = date("s", $fechaEntera);
#Notar que es lo mismo que hacer
# date("Y-m-d H:i:s")
echo "$anio-$mes-$dia $hora:$minutos:$segundos";
La salida es casi la misma fecha, pero esto sólo es para ejemplificar cómo se extrae cada cosa.
Y aquí uno de la fecha actual:
<?php
/*
Gran nota: cuando llamamos a date y
no le pasamos el segundo argumento,
se asume que la fecha es time() por
lo que...
$fechaEntera = time();
$anio = date("Y", $fechaEntera);
Es lo mismo que...
$anio = date("Y");
*/
$fechaEntera = time();
$anio = date("Y", $fechaEntera);
$mes = date("m", $fechaEntera);
$dia = date("d", $fechaEntera);
$hora = date("H", $fechaEntera);
$minutos = date("i", $fechaEntera);
$segundos = date("s", $fechaEntera);
#Notar que es lo mismo que hacer
# date("Y-m-d H:i:s")
echo "$anio-$mes-$dia $hora:$minutos:$segundos";
?>
Si quiero tomar la fecha guardada en una base de datos, y no tomar la actual o predefinir una, como lo hago?
Ejemplo del controller{
$articulos = DB::table(‘articulos’)
->select(‘articulos.titulo’,’articulos.autorEs’,’articulos.fecha’,’articulos.volumen’,’articulos.nombreRevista’,’articulos.dePagina’,’articulos.aPagina’,’articulos.nombreEvidencia’,’t.nombreTipoArticulo’)
->join(‘tipoarticulos as t’,’articulos.tipoarticulo_id’,’=’,’t.id’)
->where(‘articulos.activo’,’=’,1)
->where(‘articulos.estadoLogico’,’=’,1)
->get();
return view(‘Produccion.Articulos’,compact(‘articulos’));
}
ejemplo del blade{
{{$datos_articulos->autorEs}}, {{$datos_articulos->fecha}}, {{$datos_articulos->titulo}}, {{$datos_articulos->nombreRevista}}, vol({{$datos_articulos->volumen}}), pp({{$datos_articulos->dePagina}} – {{$datos_articulos->aPagina}})
}
Hola. Para consultas personalizadas puede contactarme en https://parzibyte.me#contacto
Saludos 🙂
¡Muchas gracias! Si me funcionó