22:57 0 0
Calcular la fecha del siguiente día de la semana por el nombre del día

Calcular la fecha del siguiente día de la semana por el nombre del día

  DrUalcman |  septiembre 52020

¿Cuántas veces has necesitado saber desde un día de la semana hasta el diguiente? ¿O conocer cuántos días quedan desde un lunes hasta un Jueves? Pues para éstas preguntas es lon que tratamos en estas líneas en el día de hoy.

Planteando el problema

Primero destacar que sólo podemos calcular a una semana vista, o mejor dicho, en éstas líneas vamos a calcular máximo a una semana vista, porque lo que estamos estudiando es saber cuántos días han pasado desde un día de la semana, hasta el siguiente, o cual es la fecha del siguiente día de la semana desde el nombre del día.

Primeras conclusiones

Desde un día de la semana primero tenemos que saber su posición en un array, o como en el caso de C#, su valor en el Enum DayOfWeek. Esto nos obligará a controlar el formato de fecha, o como en este ejemplo, sólo usar el inglés USA, ya que es el valor por defecto del Framwork .NET. Si es el caso a saber, nuestra semana comienza en Domingo, con valor 0 (cero), y termina en Sábado con valoe 6. Pro podríamos solucionar este inconveniente fácilmente aplicando el sistema de Globalización. Pero si sólo usas un idioma estas líneas te pueden ayudar.

Desarrollando la solución.

Como lo que deseamos es la siguiente fecha desde hoy, sólo necesitamos recibir como parámetro el día de la semana a calcular.. Lo pasaremos como DayOfWeek para obtener su valor.

Una vez tenemos el valor del día de la semana que hemos recibido, tenemos que coparar con el valor del día de la semana de hoy. Finalmente tenemos que comprobar quien es mayor, para así saber si es, por ejemplo un lunes y ya estamos a martes, por lo que sería el lunes de la siguiente semana.

Si hoy es mayor que el díua enviado, significa que es la proxima semana. Por lo que tendremos que agregar 7 días a nuestro cálculo. Luego el cáculo es simplemente restar el valor del día enviado al día de hoy. Si este valor es negativo sumaremos los 7 días para la proxima semana y listo.

Mejoras

Mientras escribía estas líneas ya he visto algunas mejoras que se peuden hacer. Pero seguro que hay muchas formas de mejorar esta función, pero me gusta hacer los blogs lo más didáctico posible y paso a paso para que todos puedan entender, incluso los que están empezando. Gustoso de ver en los comentartios como mejorar la función.

El código

        /// 
/// Get a date from today till day are send.
///

/// Week days in base 0 start in Sunday
///
public static DateTime GetDateAhead(int DayOfTheWeek)
{
DayOfWeek myWeekDay = (DayOfWeek)DayOfTheWeek;
return GetDateAhead(myWeekDay);
}

///
/// Get a date from today till day are send.
///

/// Day in English
///
public static DateTime GetDateAhead(string DayOfTheWeek)
{
DayOfWeek myWeekDay;
Enum.TryParse(DayOfTheWeek, out myWeekDay);
return GetDateAhead(myWeekDay);
}

///
/// Get a date from today till day are send.
///

/// From this weekday
///
public static DateTime GetDateAhead(DayOfWeek DayOfTheWeek)
{
int firstDay = (int)DateTime.Today.DayOfWeek;
int lastDay = (int)DayOfTheWeek;

int days;

if (firstDay > lastDay) days = 7 + (lastDay - firstDay);
else days = lastDay - firstDay;

return DateTime.Now.AddDays(days);
}

Como verás he creado 2 sobrecargas, una que convierte de objeto a texto y otra que convierte de texto a DayOfWeek, para finalmente llamar a la función que recibir el día ya convertido en el Enum y proceder a hacer el cálculo del siguiente día de la semana.

Conclusiones

Hice algo parecido para MS SQL, cuando haga el blog ya lo comparité aquí.

0 Comentarios

 
 
 

Archivo