Quote:Hello Ben,
I want to substract these Days also...
Hello Amor,
Below is the programming that will remove the weekends and holidays that you asked about.
Copy this section into Global Code: //=============================================================
//FUNCTION FOR FINDING A DAY BASED ON WHERE IT FALLS IN A MONTH
//=============================================================
Function FindADay(vYear as Int, vMonth as Int, vDOW as Int, vInstance as int) as Date
var vRemoveDay as Date
var vTempDate as Date
var vDayLoop as Int
vDayLoop = 0
vTempDate = @D(vMonth + ", 1, " + vYear)
If ((vInstance <= 5) and (vInstance > 0)) then
{
while vDayLoop < vInstance
{
If @Dow(vTempDate) = vDOW then
{
vDayLoop = vDayLoop + 1
If vDayLoop = vInstance then
{
vRemoveDay = vTempDate
}
}
vTempDate = vTempDate + 1
}
}
Else If (vInstance = 0) then
{
while vDayLoop < vInstance
{
If @Dow(vTempDate) = vDOW then
{
vDayLoop = vDayLoop + 1
If vDayLoop = vInstance then
{
vRemoveDay = vTempDate
}
}
vTempDate = vTempDate - 1
}
}
Return(vRemoveDay)
End Function
//==============================================================
//FUNCTION CHECK DATE
//==============================================================
Function CheckDate(vDate, vBottom, vTop) as Int
var vRet as Int
vRet = 0
If ((vDate >= vBottom) and (vDate <= vTop))
{
vRet = 1
}
Return(vRet)
End Function
//==============================================================
//FUNCTION
//==============================================================
Function DayFinder(vTop as Date, vBottom as Date, vDays as int) as int
var vFind_Date as Date
var vBottomYear as Int
var vTopYear as Int
var vTemp as Int
vBottomYear = @Year(vBottom)
vTopYear = @Year(vTop)
vTemp = vBottomYear
While vTemp <= vTopYear
{
// FindADay(YEAR, MONTH, DOW #, INSTANCE OF [Between 0 and 5, use 0 to indicate LAST])
// U.S. Holidays
vDays = vDays - CheckDate(@Str(vTemp +"/01/01"), vBottom, vTop) // New Years Day (Always January First)
vDays = vDays - CheckDate(FindADay(vTemp, 1, 1, 3), vBottom, vTop) // MLK Day (Third Monday in January)
vDays = vDays - CheckDate(FindADay(vTemp, 2, 1, 3), vBottom, vTop) // President's Day (Third Monday in February)
vDays = vDays - CheckDate(FindADay(vTemp, 5, 1, 0), vBottom, vTop) // Memorial Day (Last Monday in May)
vDays = vDays - CheckDate(@Str(vTemp +"/08/04"), vBottom, vTop) // Independance Day (Always July Fourth)
vDays = vDays - CheckDate(FindADay(vTemp, 9, 1, 1), vBottom, vTop) // Labor Day (First Monday of September)
vDays = vDays - CheckDate(FindADay(vTemp, 10, 1, 2), vBottom, vTop) // Columbus Day (Second Monday of October)
vDays = vDays - CheckDate(@Str(vTemp +"/11/11"), vBottom, vTop) // Veteran's Day (Always November Eleventh)
vDays = vDays - CheckDate(FindADay(vTemp, 11, 4, 4), vBottom, vTop) // Thanksgiving Day (Fourth Thursday of November)
vDays = vDays - CheckDate(@Str(vTemp +"/12/25"), vBottom, vTop) // Christmas Day (Always December Twenty-Fifth)
vTemp = vTemp + 1
}
Return(vDays)
End Function
Copy this section into whatever element's event you want to use: var vDays as Int
var vTemp as Date
vTemp = Date1
vDays = 0
While vTemp > Date2
{
If @DOW(vTemp) <= 5 Then
{
vDays = vDays + 1
}
vTemp = vTemp - 1
}
vDays = DayFinder(Date1, Date2, vDays)
Wdays = vDays
If you run into any problems with this programming, please let me know.
-Ben