Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Calculating number of days
Message
From
08/10/2003 22:55:56
Mike Yearwood
Toronto, Ontario, Canada
 
 
To
08/10/2003 22:23:27
Hilmar Zonneveld
Independent Consultant
Cochabamba, Bolivia
General information
Forum:
Visual FoxPro
Category:
Other
Miscellaneous
Thread ID:
00836299
Message ID:
00836622
Views:
12
I meant the code should fire only if both are dates.
IF NOT (VARTYPE(m.tdFrom)="D" AND VARTYPE(m.toDo)="D")
  RETURN .F.
ENDIF
>Shouldn't the second line have OR instead of AND?
>
>>Hey Mathew
>>
>>Walter Meester came up with the fastest way to calculate weekdays (in a recent UT thread). I modified it slightly to this...
>>
>>WEEKDAYS.PRG
>>
LPARAMETERS tdFrom, tdTo
>>IF VARTYPE(m.tdFrom)#"D" AND VARTYPE(m.tdTo)#"D"
>>  RETURN .F.
>>ENDIF
>>LOCAL lnDays
>>lnDays = ABS(m.tdFrom - m.tdTo) + 1
>>RETURN m.lnDays - INT(m.lnDays / 7) * 2 - ;
>>	IIF(DOW(MIN(m.tdFrom,m.tdTo),2) = 7, SIGN(m.lnDays % 7), SIGN(DOW(MIN(m.tdFrom,m.tdTo),2) - 7 + (m.lnDays % 7)) + 1)
>>
>>As a way to exclude holidays, build a table like this...
>>
>>HOLIDAYS.DBF
>>dHoliday d && date field
>>cHoliday c(20) && Name of the holiday
>>nLocale n(2) && locale for the holiday
>>
>>Add these indexes...
>>INDEX ON dholiday TAG dholiday
>>INDEX ON UPPER(choliday) TAG choliday
>>
>>Then try this...
>>
>>HOLIDAYS.PRG
>>
LPARAMETERS tdFrom, tdTo, tnLocale
>>IF VARTYPE(m.tdFrom)#"D" AND VARTYPE(m.tdTo)#"D"
>>  RETURN .F.
>>ENDIF
>>IF NOT FILE("HOLIDAYS.DBF")
>>  RETURN .F.
>>ENDIF
>>IF RECCOUNT("HOLIDAYS")=0
>>  RETURN 0
>>ENDIF
>>LOCAL lnHolidays
>>LOCAL ARRAY laHolidays[1]
>>IF VARTYPE(m.tnLocale)="N"
>>  SELECT COUNT(*) ;
>>    FROM HOLIDAYS ;
>>    WHERE nLocale = m.tnLocale ;
>>    AND dHoliday BETWEEN m.tdFrom AND m.tdTo ;
>>    INTO ARRAY laHolidays
>> ELSE
>>  SELECT COUNT(*) ;
>>    FROM HOLIDAYS ;
>>    WHERE dHoliday BETWEEN m.tdFrom AND m.tdTo ;
>>    INTO ARRAY laHolidays
>>ENDIF
>>RETURN laHolidays[1]
>>
>>To put it all together do this...
>>
>>WORKDAYS.PRG
>>
LPARAMETERS tdFrom, tdTo
>>IF VARTYPE(m.tdFrom)#"D" AND VARTYPE(m.tdTo)#"D"
>>  RETURN .F.
>>ENDIF
>>RETURN WEEKDAYS(m.tdFrom, m.tdTo) ;
>>  - HOLIDAYS(m.tdFrom, m.tdTo,1)
>>
>>Or you can always call weekdays and holidays without a workdays.prg
>>
>>HTH
>>>Hi All,
>>>
>>>Is there a formula or sample code to calculate the number of days excluding weekends and holidays? TIA
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform