Как рассчитать последний рабочий день месяца в VBScript - PullRequest
4 голосов
/ 19 ноября 2008

Как рассчитать последний рабочий день месяца в VBScript? Он предназначен для отчета служб отчетов.

Спасибо

Ответы [ 4 ]

7 голосов
/ 19 ноября 2008

Как насчет:

intMonth=11
'Use zero to return last day of previous month '
LastDayOfMonth= dateserial(2008,intMonth+1,0)

'Saturday '
If WeekDay(LastDayOfMonth,1)=7 Then LastDayOfMonth=LastDayOfMonth-1
'Sunday '
If WeekDay(LastDayOfMonth,1)=1 Then LastDayOfMonth=LastDayOfMonth-2

Msgbox LastDayOfMonth & "  " & Weekdayname(Weekday(LastDayOfMonth,1),1)
2 голосов
/ 19 ноября 2008

Здесь есть хорошая статья CodeProject: Работа с деловыми датами (выходные дни и т. Д.) .

Этот проект направлен на облегчение проблемы выяснения действительного деловые даты. Включает несколько функции, которые я создал, чтобы определить является ли дата праздником или выходные, а также для извлечения на следующий или последний рабочий день. Также есть функция поиска последний день месяца.

Function LastBusinessDay(sDate)

   Dim iDay, iDaysToAdd, iDate

   iDaysToAdd = 0
   iDate = sDate

   x = 1

   Do while iDaysToAdd >= 0

      If Weekday(iDate) = 1 or Weekday(iDate) = 7 or _
                isHoliday(iDate) <> 0 then
         iDay = Weekday(iDate)
         Select Case cint(iDay)
            Case 1  'Sunday

               iDate = DateAdd("d", -1, iDate)

            Case 7  'Saturday

               iDate = DateAdd("d", -1, iDate)

            Case else    'this is a valid day

                if isHoliday(iDate) > 0 then
                    iDate = dateadd("d", -(isHoliday(iDate)), iDate)
                else
                    iDaysToAdd = iDaysToAdd - 1
                end if

         End Select
      end if
   Loop

   LastBusinessDay = iDate
End Function

P.S .: Функции LastDayOfMonth и isHoliday вы найдете в статье.

1 голос
/ 13 апреля 2012

Вот одно решение для тех, кто хочет получить Последний рабочий день предыдущего месяца.

Dim lastbusinessdayofprevmonth

Sub GetLastDay()

Dim curdate
curdate = Date()    

Dim firstdayofcurmonth 
firstdayofcurmonth = Month(curdate) & "/1/" & Year(curdate)

Dim lastdayofprevmonth
lastdayofprevmonth = DateAdd("d", -1, firstdayofcurmonth)

Dim day
day = weekday(lastdayofprevmonth)


if(day = 1) then
    lastbusinessdayofprevmonth = DateAdd("d", -2, lastdayofprevmonth)
elseif (day = 7) then
    lastbusinessdayofprevmonth = DateAdd("d", -1, lastdayofprevmonth)
else
    lastbusinessdayofprevmonth = lastdayofprevmonth
end if

end sub
0 голосов
/ 19 ноября 2008

Если вы имеете в виду последнюю неделю день месяца (M-F), тогда попробуйте:

Dim d

d = DateAdd("m", 1, Now)

d = Month(d) & "/1/" & Year(d)
d = DateAdd("d", -1, d)

If Weekday(d) = 7 Then
    d = DateAdd("d", -1, d)
ElseIf Weekday(d) = 1 Then
    d = DateAdd("d", -2, d)
End If

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