Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Calculating number of days
Message
De
08/10/2003 22:55:56
Mike Yearwood
Toronto, Ontario, Canada
 
 
À
08/10/2003 22:23:27
Hilmar Zonneveld
Independent Consultant
Cochabamba, Bolivie
Information générale
Forum:
Visual FoxPro
Catégorie:
Autre
Divers
Thread ID:
00836299
Message ID:
00836622
Vues:
13
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
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform