- Publicado el
Días transcurridos entre dos Fechas
En el mundo de la programación, calcular la diferencia entre dos fechas es una tarea común que puede ser crucial en aplicaciones que necesitan rastrear eventos, calcular vencimientos, o analizar datos históricos. En esta entrada del blog, vamos a analizar una función en PHP que calcula la cantidad de días transcurridos entre dos fechas. Revisaremos su código, explicaremos su funcionamiento paso a paso, y discutiremos cómo podemos utilizarla en un entorno de producción.
Código de la Función
Aquí está la función que vamos a revisar:
public static function getDaysPassed($dateStart, $dateEnd)
{
$dateInit = strtotime($dateStart);
$dateEnd = strtotime($dateEnd);
if ($dateEnd > $dateInit) {
$dias = ($dateEnd - $dateInit) / 86400;
$dias = abs($dias);
$dias = floor($dias);
return intval($dias);
} else {
throw new \Exception("La fecha final no puede ser menor que la fecha inicial", 1);
}
}
Desglosando la Función
Declaración de la Función
public static function getDaysPassed($dateStart, $dateEnd)
- public: La función es accesible desde fuera de la clase.
- static: La función pertenece a la clase y no a una instancia específica.
- function getDaysPassed: Define el nombre de la función y sus parámetros.
- $dateStart, $dateEnd: Son las dos fechas de entrada que deben proporcionarse en formato de cadena (por ejemplo, “2024-01-01”).
Conversión de Fechas a Timestamps
$dateInit = strtotime($dateStart);
$dateEnd = strtotime($dateEnd);
- strtotime: Convierte una cadena de fecha en un timestamp Unix (el número de segundos desde la “Época Unix”, es decir, el 1 de enero de 1970).
- $dateInit y $dateEnd: Ahora contienen los valores de timestamp correspondientes a las fechas proporcionadas.
Comparación de Fechas
if ($dateEnd > $dateInit)
Compara los timestamps para asegurarse de que la fecha final no sea anterior a la fecha de inicio. Si $dateEnd es mayor, significa que $dateEnd es una fecha posterior a $dateStart.
Cálculo de la Diferencia en Días
$dias = ($dateEnd - $dateInit) / 86400;
- ($dateEnd - $dateInit): Calcula la diferencia en segundos entre las dos fechas.
- 86400: Es el número de segundos en un día (60 segundos * 60 minutos * 24 horas).
- $dias: Contiene la diferencia en días entre las dos fechas.
Asegurando que el resultado no sea negativo
$dias = abs($dias);
$dias = floor($dias);
return intval($dias);
- abs($dias): Toma el valor absoluto de la diferencia para asegurarse de que el número de días no sea negativo.
- floor($dias): Redondea hacia abajo para obtener un número entero de días.
- intval($dias): Convierte el resultado final a un entero antes de devolverlo.
Manejo de Excepciones
else {
throw new \Exception("La fecha final no puede ser menor que la fecha inicial", 1);
}
- Si la fecha final es menor que la fecha inicial, lanza una excepción con un mensaje descriptivo.
La función getDaysPassed es una solución simple y efectiva para calcular la cantidad de días transcurridos entre dos fechas en PHP. Siguiendo las mejores prácticas de validación y manejo de excepciones, puedes integrar esta función de manera segura en tus aplicaciones de producción.