miércoles, septiembre 22, 2010

Calcular fechas laborables con Ruby

Hoy me encontré con este post llamado "Calculate Business Days using LINQ" donde explican como usar C# y LINQ para de un rango de fechas obtener solo las fechas que son laborables, es decir excluir las fechas que caigan en sábado y domingo.

El código se muestra a continuación donde se haca primero una llamada al método GetAllDates y se le pasa una fecha inicial y otra final, después con Where de LINQ se evalúa cada fecha un método que regresa falso o verdadero si la fecha cae en fin de semana o no, obteniendo al fina un arreglo con las fechas laborables.


Después de revisarlo, me pregunte, que tan complicado es hacer lo mismo en Ruby. Después de unos minutos me di cuenta que es ridículamente simple hacer lo mismo que LINQ y C# en solo 1 linea de código.

A mi metodo wroking_days se le pasa una fecha inicial y una fecha final y como resultado tenemos una arreglo de fechas excluyendo las que caen en fin de semana.




3 comentarios:

ReneDeLaGarza dijo...

public static IEnumerable GetWorkingDays(DateTime start, DateTime end)
{
return System.Linq.Enumerable.Range(0, end.Subtract(start).Days + 1)
.Where( i => start.AddDays(i).DayOfWeek == DayOfWeek.Sunday )
.Select(i => start.AddDays(i));

}
public static void Main (string[] args)
{
foreach( DateTime d in GetWorkingDays(DateTime.Now, DateTime.Now.AddDays(10)))
{
Console.WriteLine(d.ToShortDateString());
}
}

ReneDeLaGarza dijo...

perdon ese start.AddDays(i).DayOfWeek era != en lugar de ==

Mario Alberto Chavez dijo...

Rene;

Yo tambien habia visto que se podia mejorar, de hecho hay una actualizacion al post de C# donde muestra otra opcion tambien con iEnumerable en lugar de List