una sumar semana saber sabados laborables habiles habil funcion fines fecha domingos dias contar como calcular .net algorithm comparison date

sumar - Comparación de fecha de.NET: ¿Cuenta la cantidad de días hábiles desde una fecha?



funcion dias laborables excel (7)

Combinamos dos artículos de CodeProject para llegar a una solución completa. Nuestra biblioteca no es lo suficientemente conciso como para publicar como código fuente, pero puedo indicarle los dos proyectos que utilizamos para lograr lo que necesitábamos. Como siempre con los artículos de CodeProject, lea los comentarios, puede haber información importante en ellos.

Cálculo de días hábiles: http://www.codeproject.com/KB/cs/busdatescalculation.aspx

Un día laboral alternativo calculado: http://www.codeproject.com/KB/cs/datetimelib.aspx

Cálculo de vacaciones: http://www.codeproject.com/KB/dotnet/HolidayCalculator.aspx

¿Cuál es la forma más fácil de calcular la cantidad de días hábiles desde una fecha? VB.NET preferido, pero C # está bien.

Y por "días hábiles", me refiero a todos los días excluyendo los sábados y domingos. Si el algoritmo también puede tener en cuenta una lista de fechas de ''exclusión'' específicas que no deberían contar como días hábiles, sería gravy.

Gracias de antemano por el genio contribuido.


Esto hará lo que tú quieras. Debe ser lo suficientemente fácil para convertir a VB.NET, sin embargo, ha sido demasiado tiempo para poder hacerlo.

DateTime start = DateTime.Now; DateTime end = start.AddDays(9); IEnumerable<DateTime> holidays = new DateTime[0]; // basic data int days = (int)(end - start).TotalDays; int weeks = days / 7; // check for a weekend in a partial week from start. if (7- (days % 7) <= (int)start.DayOfWeek) days--; if (7- (days % 7) <= (int)start.DayOfWeek) days--; // lose the weekends days -= weeks * 2; foreach (DateTime dt in holidays) { if (dt > start && dt < end) days--; }


La forma más fácil es probablemente algo así como

DateTime start = new DateTime(2008, 10, 3); DateTime end = new DateTime(2008, 12, 31); int workingDays = 0; while( start < end ) { if( start.DayOfWeek != DayOfWeek.Saturday && start.DayOfWeek != DayOfWeek.Sunday ) { workingDays++; } start = start.AddDays(1); }

Puede que no sea el más eficiente, pero permite la verificación fácil de una lista de días festivos.


en general (sin código) -

  • restar las fechas para obtener la cantidad de días
  • dividir por 7 para obtener el número de semanas
  • restar número de semanas por 2
  • contar el número de fechas de vacaciones que caen con el rango de fechas
  • reste ese conteo

toque las fechas de inicio y finalización para que caigan de lunes a lunes, luego vuelva a agregar la diferencia

[disculpas por las generalidades sin código, es tarde]

[cf endDate.Subtract (startDate) .TotalDays]


Aquí hay un método para SQL Server. También hay un método vbscript en la página. No es exactamente lo que pediste, lo sé.


DateDiff junto con algunas otras funciones de Date * son exclusivas de VB.NET y, a menudo, el tema de la envidia de los desarrolladores de C #. Sin embargo, no estoy seguro de que sea muy útil en este caso.


Aquí hay una muestra de la fórmula de Steve en VB sin la resta de vacaciones:

Function CalcBusinessDays(ByVal DStart As Date, ByVal DEnd As Date) As Decimal Dim Days As Decimal = DateDiff(DateInterval.Day, DStart, DEnd) Dim Weeks As Integer = Days / 7 Dim BusinessDays As Decimal = Days - (Weeks * 2) Return BusinessDays Days = Nothing Weeks = Nothing BusinessDays = Nothing End Function