La Web del Programador: Comunidad de Programadores
 
    Pregunta:  38601 - CALCULOS CON FECHAS EN CLIPPER
Autor:  CESAR DIAZ LOPEZ
NECESITO CALCULAR LAPSOS DE DIAS EN CLIPPER A PARTIR DE FECHAS DE INGRESO Y SALIDA SIN OMITIR LOS DIAS FERIADOS Y FIN DE SEMANA POR FAVOR URGENTE NECESITO AYUDA
DE ATEMANO MUCHAS GRACIAS

  Respuesta:  Jose Luis C. M. C. M.
(En los ejemplos que expongo omito pasos obvios como declarar variables, y cosas así).

Tu pregunta dice "sin omitir dias feriados y fines de semana".
Si esto es así, entonces simplemente resta la fecha final de la inicial y te dá la diferencia en días entre ambas:

dFInic := ctod( "01/01/2002" ) // 1 de enero del 2002
dFFin := ctod( "08/01/2002" ) // 8 de enero del 2002
dResul := dFFin - dFInic (el valor de dResul sería 7)

Pero si lo que necesitas es "omitir" los dias feriados y fines de semana, el asunto es más complejo. Una forma sencilla sería hacerlo por medio de un ciclo, que recorra desde la fecha inicial hasta la fecha final, y que compare los fines de semana y días feriados):

nDiferencia := 0
dFecha := dFInic // Estas variables contienen la fecha inicial.
for nCic := ( dFFin -dFIni ) + 1 // Según los días de diferencia.
dFecha += nCic // Hacemos que la fecha "se recorra"
if dow( dFecha ) <> 1 .and. dow( dFecha ) <> 7 // que omita Domingos y Sábados (7).
nDiferencia ++ // Sumamos un día a la diferencia.
endif
next

Este ejemplo no cuenta los Domingos (día 1 )y Sábados (7), Para los días feriados tendrías que guardar en una lista estos días y comparar la fecha actual (dFecha) para ver si es alguna de ellas.
Si tienes alguna duda, escríbeme un mensaje.