¿Cuántos días han pasado? Resolvemos el problema eterno en C#
\n\nImagine: está escribiendo una aplicación para la gestión de vacaciones, un planificador de tareas o simplemente quiere saber cuántos días faltan para Año Nuevo. Y aquí surge la pregunta clásica: «¿Cómo calcular la diferencia entre dos fechas en C#?». Esta consulta es una de las más populares en Stack Overflow, y con razón. Trabajar con fechas es una base que todo desarrollador debe conocer.
\n\nEn este artículo no solo daremos una respuesta seca. Analizaremos todo con ejemplos prácticos, mostraremos los obstáculos y le enseñaremos a obtener la cantidad de días (y no solo) entre dos momentos cualesquiera. ¡Allá vamos!
\n\nLa forma más sencilla: restar una fecha de otra
\n\nEn C#, para trabajar con fechas y horas, existe la potente estructura DateTime. El secreto principal es que si resta un objeto DateTime de otro, no obtendrá un número, sino un objeto especial: TimeSpan. Es este objeto el que almacena la diferencia.
Ejemplo básico: diferencia en días entre dos fechas específicas
\n\nSupongamos que quiere saber cuántos días pasaron entre el 1 de marzo de 2024 y el 10 de mayo de 2024.
\n\nusing System;\n\nclass Program\n{\n static void Main()\n {\n // Creamos dos fechas\n DateTime startDate = new DateTime(2024, 3, 1);\n DateTime endDate = new DateTime(2024, 5, 10);\n\n // Calculamos la diferencia\n TimeSpan difference = endDate - startDate;\n\n // Obtenemos la cantidad de días completos\n int days = difference.Days;\n\n Console.WriteLine($"Diferencia en días: {days}");\n // Salida: Diferencia en días: 70\n }\n}\n\n\nEs sencillo, ¿verdad? El operador - está sobrecargado para DateTime y devuelve un TimeSpan. La propiedad .Days devuelve la cantidad entera de días (sin tener en cuenta horas, minutos y segundos).
Calculando la diferencia con «hoy»
\n\nA menudo es necesario calcular cuántos días han pasado desde algún evento hasta el momento actual. Para ello, usamos DateTime.Now o DateTime.Today.
DateTime today = DateTime.Today; // Solo la fecha, hora 00:00\nDateTime someDay = new DateTime(2025, 1, 1); // 1 de enero de 2025\n\nTimeSpan diff = someDay - today;\n\nConsole.WriteLine($"Faltan para Año Nuevo: {diff.Days} días");\n\n\nTenga en cuenta: DateTime.Today devuelve la fecha actual con la hora establecida en 00:00:00. Esto es útil si no le importan las horas y los minutos.
¿Y si necesita más que solo días?
\n\nLa estructura TimeSpan no es solo .Days. También tiene otras propiedades útiles que le serán de ayuda si decide ampliar la funcionalidad.
- \n
.Days— cantidad de días completos. \n .Hours— horas (de 0 a 23). \n .Minutes— minutos. \n .Seconds— segundos. \n .TotalDays— cantidad total de días como número decimal (por ejemplo, 70.5). \n .TotalHours— cantidad total de horas. \n
Ejemplo con TotalDays
\n\nImagine que la diferencia entre las fechas es exactamente de 36 horas. La propiedad .Days mostrará 1 (porque es un día completo y 12 horas). Mientras que .TotalDays mostrará 1.5.
DateTime start = new DateTime(2024, 1, 1, 0, 0, 0);\nDateTime end = new DateTime(2024, 1, 2, 12, 0, 0); // 1 de enero + 1 día y 12 horas\n\nTimeSpan span = end - start;\n\nConsole.WriteLine($"Días (completos): {span.Days}"); // 1\nConsole.WriteLine($"Total de días: {span.TotalDays}"); // 1.5\n\n\nSi su tarea es simplemente saber la cantidad de días completos, use .Days. Si necesita un valor exacto con decimales, use
Blogs
Book Recommendations
Leer también
Operador ternario en Go: cómo reemplazar C y no volverse loco
Generics en Swift: para qué sirven y cómo usarlos
Cómo combinar dos arrays en Java: 5 formas + ejemplos de código
¿Por qué no se pueden declarar variables en switch? Análisis en C++
IsNumeric en JavaScript: 5 errores fatales al validar números