Fechas y Tiempo en PHP
Trabajar con fechas es esencial en casi cualquier aplicacion. PHP ofrece la clase DateTime y funciones para formatear, comparar y calcular fechas facilmente.
Obtener fecha y hora actual
La funcion date() formatea la fecha actual
segun el patron que indiques:
<?php
declare(strict_types=1);
// Fecha actual
echo date('Y-m-d'); // 2024-12-15
echo date('d/m/Y'); // 15/12/2024
// Hora actual
echo date('H:i:s'); // 14:30:45
echo date('H:i'); // 14:30
// Fecha y hora completa
echo date('Y-m-d H:i:s'); // 2024-12-15 14:30:45
// Dia de la semana
echo date('l'); // Sunday
echo date('D'); // Sun
Formatos comunes
<?php
declare(strict_types=1);
// Caracteres de formato mas usados:
// Y - Año (4 digitos): 2024
// m - Mes (01-12)
// d - Dia (01-31)
// H - Hora 24h (00-23)
// i - Minutos (00-59)
// s - Segundos (00-59)
// l - Nombre del dia (Monday, Tuesday...)
// F - Nombre del mes (January, February...)
// j - Dia sin cero (1-31)
// n - Mes sin cero (1-12)
echo date('j de F, Y'); // 15 de December, 2024
echo date('d-m-Y H:i'); // 15-12-2024 14:30
La clase DateTime
DateTime es la forma moderna de trabajar con fechas
en PHP. Es mas flexible y potente que date():
<?php
declare(strict_types=1);
// Fecha actual
$ahora = new DateTime();
echo $ahora->format('Y-m-d H:i:s');
// Fecha especifica
$fecha = new DateTime('2024-06-15');
echo $fecha->format('d/m/Y'); // 15/06/2024
// Desde texto legible
$manana = new DateTime('tomorrow');
$proximoLunes = new DateTime('next Monday');
$haceUnaSemana = new DateTime('-1 week');
echo $manana->format('Y-m-d');
echo $proximoLunes->format('Y-m-d');
echo $haceUnaSemana->format('Y-m-d');
Modificar fechas
<?php
declare(strict_types=1);
$fecha = new DateTime('2024-01-15');
// Añadir tiempo
$fecha->modify('+1 day');
echo $fecha->format('Y-m-d'); // 2024-01-16
$fecha->modify('+2 weeks');
echo $fecha->format('Y-m-d'); // 2024-01-30
$fecha->modify('+3 months');
echo $fecha->format('Y-m-d'); // 2024-04-30
// Restar tiempo
$fecha->modify('-1 year');
echo $fecha->format('Y-m-d'); // 2023-04-30
// Con DateInterval (mas preciso)
$fecha = new DateTime('2024-01-15');
$fecha->add(new DateInterval('P10D')); // +10 dias
echo $fecha->format('Y-m-d'); // 2024-01-25
Calcular diferencias
<?php
declare(strict_types=1);
$inicio = new DateTime('2024-01-01');
$fin = new DateTime('2024-12-31');
$diferencia = $inicio->diff($fin);
echo $diferencia->days; // 365 (dias totales)
echo $diferencia->y; // 0 (años)
echo $diferencia->m; // 11 (meses)
echo $diferencia->d; // 30 (dias)
// Formato legible
echo $diferencia->format('%y años, %m meses, %d dias');
// 0 años, 11 meses, 30 dias
// Ejemplo practico: edad
$nacimiento = new DateTime('1995-06-20');
$hoy = new DateTime();
$edad = $nacimiento->diff($hoy);
echo "Tienes {$edad->y} años";
Comparar fechas
<?php
declare(strict_types=1);
$fecha1 = new DateTime('2024-06-15');
$fecha2 = new DateTime('2024-12-25');
$hoy = new DateTime();
// Comparacion directa
if ($fecha1 < $fecha2) {
echo 'fecha1 es anterior a fecha2';
}
if ($fecha2 > $hoy) {
echo 'fecha2 esta en el futuro';
}
if ($fecha1 == $fecha2) {
echo 'Son la misma fecha';
}
// Verificar si una fecha ya paso
$evento = new DateTime('2024-03-15');
if ($evento < $hoy) {
echo 'El evento ya paso';
} else {
echo 'El evento aun no ha ocurrido';
}
Zona horaria
<?php
declare(strict_types=1);
// Establecer zona horaria por defecto
date_default_timezone_set('Europe/Madrid');
// Crear fecha con zona horaria especifica
$madrid = new DateTime('now', new DateTimeZone('Europe/Madrid'));
$tokyo = new DateTime('now', new DateTimeZone('Asia/Tokyo'));
$newYork = new DateTime('now', new DateTimeZone('America/New_York'));
echo 'Madrid: ' . $madrid->format('H:i') . PHP_EOL;
echo 'Tokyo: ' . $tokyo->format('H:i') . PHP_EOL;
echo 'New York: ' . $newYork->format('H:i') . PHP_EOL;
// Convertir entre zonas
$fecha = new DateTime('2024-06-15 10:00', new DateTimeZone('UTC'));
$fecha->setTimezone(new DateTimeZone('Europe/Madrid'));
echo $fecha->format('H:i'); // 12:00 (UTC+2 en verano)
Timestamps
Un timestamp es el numero de segundos desde el 1 de enero de 1970:
<?php
declare(strict_types=1);
// Timestamp actual
$timestamp = time();
echo $timestamp; // 1702654800
// Convertir timestamp a fecha
echo date('Y-m-d H:i:s', $timestamp);
// DateTime desde timestamp
$fecha = new DateTime();
$fecha->setTimestamp(1702654800);
echo $fecha->format('Y-m-d');
// Obtener timestamp de DateTime
$fecha = new DateTime('2024-06-15');
echo $fecha->getTimestamp();
Ejercicios
Ejercicio 1: Mostrar fecha formateada
Muestra la fecha actual en formato "15 de diciembre de 2024".
Ver solucion
<?php
declare(strict_types=1);
$meses = [
1 => 'enero', 2 => 'febrero', 3 => 'marzo',
4 => 'abril', 5 => 'mayo', 6 => 'junio',
7 => 'julio', 8 => 'agosto', 9 => 'septiembre',
10 => 'octubre', 11 => 'noviembre', 12 => 'diciembre'
];
$dia = date('j');
$mes = $meses[(int)date('n')];
$anio = date('Y');
echo "$dia de $mes de $anio";
Ejercicio 2: Calcular edad
Crea una funcion calcularEdad(string $fechaNacimiento): int
que reciba una fecha en formato 'Y-m-d' y retorne la edad en años.
Ver solucion
<?php
declare(strict_types=1);
function calcularEdad(string $fechaNacimiento): int
{
$nacimiento = new DateTime($fechaNacimiento);
$hoy = new DateTime();
$diferencia = $nacimiento->diff($hoy);
return $diferencia->y;
}
echo calcularEdad('1995-06-20'); // Ej: 29
Ejercicio 3: Dias hasta evento
Crea una funcion diasHasta(string $fecha): int
que calcule cuantos dias faltan hasta una fecha futura.
Ver solucion
<?php
declare(strict_types=1);
function diasHasta(string $fecha): int
{
$objetivo = new DateTime($fecha);
$hoy = new DateTime();
$diferencia = $hoy->diff($objetivo);
return $diferencia->days;
}
echo diasHasta('2024-12-25'); // Dias hasta Navidad
¿Has encontrado un error o tienes una sugerencia para mejorar esta leccion?
Escribenos¿Te está gustando el curso?
Tenemos cursos premium con proyectos reales y soporte personalizado.
Descubrir cursos premium