Newsgroup: it.comp.lang.vo-clipper
Titolo: Conteggio giorni non festivi

Salve a tutti
            Qualcuno sa se esiste una funzione o qualcosa per contare il
numero dei giorni tra due date con esclusione dei giorni festivi?
  Lavoro con  V.O. 2.5.
                                            Grazie in anticipo

 ha scritto nel messaggio
news:lSlrd.241657$b5.11...@news3.tin.it...


 ha scritto nel messaggio
news:wUDrd.444452$35.19...@news4.tin.it...



Ciao. Questa funzione calcola il giorno di pasqua. il giorno successivo è 
lunedi di Pasqua.
es. dLunediDiPasqua := CalcolaPasqua(year(today())) +1
FUNCTION CalcolaPasqua(xYear AS DWORD) AS DATE
LOCAL nYear := IF( ValType( xYear ) = "D", Year( xYear ), xYear )
LOCAL a := Integer( nYear % 19 )
LOCAL b := Integer( nYear / 100 )
LOCAL c := Integer( nYear % 100 )
LOCAL d := Integer( b / 4 )
LOCAL e := Integer( b % 4 )
LOCAL f := Integer( ( b + 8 ) / 25 )
LOCAL g := Integer( ( b - f + 1 ) / 3 )
LOCAL h := Integer( ( 19 * a + b - d - g + 15 ) % 30 )
LOCAL i := Integer( c / 4 )
LOCAL k := Integer( c % 4 )
LOCAL l := Integer( ( 32 + e + e + i + i - h - k ) % 7 )
LOCAL m := Integer( ( a + 11 * h + 22 * l ) / 451 )
LOCAL n := h + l - 7 * m + 114
LOCAL nDay   := Integer( n % 31 ) + 1
LOCAL nMonth := Integer( n / 31 )
RETURN CToD( StrZero( nDay, 2 ) + "/" + StrZero( nMonth, 2 ) + "/" +Str( 
nYear ) )
Ciao. Enzo.


Io ho risolto controllado i giorni festivi con queste funzioni, con una 
programmini a doc che conta i giorni festivi tra le date richieste 
dovrebbe essere facile:
FUNCTION EASTER( xYear )
     LOCAL nYear := IF( ValType( xYear ) = "D", Year( xYear ), xYear )
     LOCAL a := Integer( nYear % 19 )
     LOCAL b := Integer( nYear / 100 )
     LOCAL c := Integer( nYear % 100 )
     LOCAL d := Integer( b / 4 )
     LOCAL e := Integer( b % 4 )
     LOCAL f := Integer( ( b + 8 ) / 25 )
     LOCAL g := Integer( ( b - f + 1 ) / 3 )
     LOCAL h := Integer( ( 19 * a + b - d - g + 15 ) % 30 )
     LOCAL i := Integer( c / 4 )
     LOCAL k := Integer( c % 4 )
     LOCAL l := Integer( ( 32 + e + e + i + i - h - k ) % 7 )
     LOCAL m := Integer( ( a + 11 * h + 22 * l ) / 451 )
     LOCAL n := h + l - 7 * m + 114
     LOCAL nDay   := Integer( n % 31 ) + 1
     LOCAL nMonth := Integer( n / 31 )
RETURN CToD( StrZero( nDay, 2 ) + "/" + StrZero( nMonth, 2 ) + "/" + 
Right( Str( nYear ), 2 ) )
FUNCTION IsHoliday(dDataVal, cMerc)
	LOCAL dData := CToD("") AS DATE
	LOCAL cAnno := "" AS STRING
	LOCAL aDate := {} AS ARRAY
	LOCAL cData := "" AS STRING
	LOCAL nNum := 0 AS LONGINT
	IF IsNil(dDataVal)
		RETURN .F.
	ENDIF
	IF IsNil(cMerc)
		cMerc := "TARG"
	ENDIF
	IF (DoW(dDataVal) == 1 .or. DoW(dDataVal)== 7)
		RETURN .T.
	ENDIF
	cData := DToC(dDataVal)
	cAnno := Right(cData, 4)
	AAdd(aDate, {"01-01-", "TARG, LIFF"})
	// inserire data di pasqua
	dData := EASTER(Val(cAnno))
	AAdd(aDate, {Left(DToC(dData-2),6) + cAnno, "TARG, LIFF"})
	AAdd(aDate, {Left(DToC(dData+1),6) + cAnno, "TARG, LIFF"})
	AAdd(aDate, {"01-05-" + cAnno, "TARG, LIFF"})
	AAdd(aDate, {"15-08-" + cAnno, "TARG, LIFF"})
	AAdd(aDate, {"08-12-" + cAnno, "TARG, LIFF"})
	AAdd(aDate, {"24-12-" + cAnno, "TARG, LIFF"})
	AAdd(aDate, {"25-12-" + cAnno, "TARG, LIFF"})
	AAdd(aDate, {"26-12-" + cAnno, "TARG, LIFF"})
	AAdd(aDate, {"31-12-" + cAnno, "TARG, LIFF"})
	nNum := AScanExact(cData)
	IF nNum == 0
		RETURN .F.
	ENDIF
 
	IF aDate[nNum, 2] == AllTrim(Upper(cMerc))
		RETURN .T.
	ENDIF
 
RETURN .F.

 regolarmi visto che ogni anno cambia, tu come hai risolto il problema?
Io uso questa funzione:
FUNCTION EASTER( xYear )
    LOCAL nYear := IF( VALTYPE( xYear ) = "D", YEAR( xYear ), xYear )
    LOCAL a := INT( nYear % 19 )
    LOCAL b := INT( nYear / 100 )
    LOCAL c := INT( nYear % 100 )
    LOCAL d := INT( b / 4 )
    LOCAL e := INT( b % 4 )
    LOCAL f := INT( ( b + 8 ) / 25 )
    LOCAL g := INT( ( b - f + 1 ) / 3 )
    LOCAL h := INT( ( 19 * a + b - d - g + 15 ) % 30 )
    LOCAL i := INT( c / 4 )
    LOCAL k := INT( c % 4 )
    LOCAL l := INT( ( 32 + e + e + i + i - h - k ) % 7 )
    LOCAL m := INT( ( a + 11 * h + 22 * l ) / 451 )
    LOCAL n := h + l - 7 * m + 114
    LOCAL nDay   := INT( n % 31 ) + 1
    LOCAL nMonth := INT( n / 31 )
    RETURN CTOD( STRZERO( nDay, 2 ) + "/" + STRZERO( nMonth, 2 ) + "/" +
RIGHT( STR( nYear ), 2 ) )
Ma non mi chiedere perché funziona. :-)
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg

 	AAdd(aDate, {"24-12-" + cAnno, "TARG, LIFF"})
Qui da noi il 24 si lavora, al limite mezza giornata, ma e' una  
concessione, e' un giorno di lavoro come un altro :)
Ciao.Alberto.
-- 
===============================================================
Alberto Rubinelli - A2 SISTEMI  Opera 7.54->
news.individual.net
Via Costantino Perazzi 22 - 28100 NOVARA - ITALY
Tel 0321 640149  Fax 0321 391769 BBS 0321 392320
Mail: 
alb...@retrocomputing.net
  ICQ : 49872318
Visita il mio museo di computers: 
http://www.oldcomputers.it
---------------------------------------------------------------
Per favore, non scrivetemi in html, testo ascii a 7 bit
Non rispondo a chi mi scrive con indirizzo di reply alterato
===============================================================

 ha scritto nel messaggio
news:lSlrd.241657$b5.11...@news3.tin.it...


 
Si ma la borsa italiana è chiusa.... e purtroppo si lavora comunque ;-)