В VB рассчитывается 5-й рабочий день каждого месяца - PullRequest
3 голосов
/ 25 марта 2010

В VB, какую кодировку я могу использовать для вычисления 5-го рабочего дня каждого месяца?И если 5-й день - выходной, подняться на один день.

Ответы [ 4 ]

1 голос
/ 30 марта 2010

Вам нужно считать каждый действительный рабочий день, пока не дойдете до пятого. Э.Г.

index = 0
Do
  If dateValue.DayOfWeek <> DayOfWeek.Saturday _ 
      AndAlso dateValue.DayOfWeek <> DayOfWeek.Sunday _ 
      AndAlso Not HolidayList.Contains( dateValue ) Then

     index = index + 1
     If index >= 5 Then _
        Exit Do
  End If
  dateValue = dateValue.AddDays(1)
Loop
1 голос
/ 25 марта 2010

Задача состоит из 2 основных компонентов: во-первых, вам нужен список государственных праздников, а во-вторых, вам нужно сосчитать дни недели, которые являются рабочими днями в вашем регионе.

Вы можете жестко запрограммировать свои выходные длябыстрое решение, и если вы хотите, чтобы этот код продолжал работать без изменений, вам потребуется Google для некоторых алгоритмов / функций для расчета вашего отпуска.Вот ссылка на некоторые примеры функций расчета для праздников, включая Пасху.http://www.cpearson.com/EXCEL/holidays.htm

Ваша основная функция может использовать функции VB Weekday и WeekdayName (при необходимости) вместе с вашим списком государственных праздников для подсчета всех дней, приходящихся на обычный рабочий день, которого нет в вашем списке.праздничных дней.

1 голос
/ 25 марта 2010

Используйте функцию Weekday для субботы и воскресенья. Праздники зависят от местоположения и страны, и для этого вам нужно реализовать собственную функцию.

1 голос
/ 25 марта 2010

Вам понадобится список дат праздников, с которыми можно сравнивать. Вам нужно будет построить и сохранить этот список отдельно. Вы не сказали какой вариант VB (VBA? VB.NET?), Но в VB.NET вы могли бы сделать:

Dim datevalue As DateTime = New DateTime(DateTime.Year, DateTime.Month, 1)
Dim dayIsFound As Boolean = False
Dim workDays As Integer

workDays = 1
While Not dayIsFound
    If ( dateValue.DayOfWeek <> DayOfWeek.Saturday _ 
        And dateValue.DayOfWeek <> DayOfWeek.Sunday _ 
        And Not HolidayList.Contains( dateValue )  _ 

        workDays = workDays + 1
    End If

    If  index >= 5 Then
        dayIsFound = True
    Else
        dateValue = dateValue.AddDays(1)
    End If
End While

Технически, можно построить алгоритм, который определяет основные праздники на основе федеральных правил (в США), но он сложен и может не соответствовать праздникам компании, для которой вы строите этот компонент. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...