Page 1 of 1

Funcion para saber las fechas de las semanas de un mes

Posted: Thu Jun 11, 2009 9:08 pm
by Vladimir Zorrilla
Amigos para el quien necesite

Aqui un algoritimo para tener en un arreglo bidimensional las fechas de inicio y fin
de las semanas de un mes

FUNC ASEMANA( ELmes, aNno , UNO)
LOCAL aSem:={},DIASEM,FECHA,IFECHA,FFECHA,J:=1
LOCAL MES:= IF(ELMES<10,"0","")+LTRIM(STR(ELMES))

FECHA:=CTOD( "01/"+MES+"/"+LTRIM(STR(ANNO)) )
IFECHA:=FECHA

FOR J= 1 TO ultdia(ELmes,anno)
FECHA:=CTOD( IF(J<10,"0","")+LTRIM(STR(J))+"/"+MES+"/"+LTRIM(STR(ANNO)) )
DIASEM:= CDOW( FECHA )
IF UPPE(DIASEM)="SUNDAY"
FFECHA:=FECHA
AADD( aSem ,{ IFECHA,FFECHA } )
IFECHA:=FECHA+1
ENDIF
NEXT J
// AL ACABAR DOMINGO CHEVERE PERO SI NO FLATA PONER EL RANGO FINAL
// DEL EL DIA LUN HASTA EL ULTIMO DIA DEL MES
IF UPPE(DIASEM)="SUNDAY"
ELSE
FFECHA:=FECHA
AADD( aSem ,{ IFECHA,FFECHA } )
ENDIF

IF VALTYPE(UNO)="U"
ELSE
FOR J=1 TO LEN(aSem)
MSGARRAY( aSem[J])
NEXT J
ENDIF
RETU aSem



Func ultdia(numdi,anno)
Local nunu
do case
case numdi=1 ;nunu:=31
case numdi=2
if int(anno/4)*4=anno ;nunu:=29 ;else ;nunu:=28 ;end
case numdi=3 ;nunu:=31
case numdi=4 ;nunu:=30
case numdi=5 ;nunu:=31
case numdi=6 ;nunu:=30
case numdi=7 ;nunu:=31
case numdi=8 ;nunu:=31
case numdi=9 ;nunu:=30
case numdi=10;nunu:=31
case numdi=11;nunu:=30
case numdi=12;nunu:=31
endcase
retu(nunu)


FUNCTION MsgArray( aArray, cMsg )

LOCAL cText := ""

DEFAULT cMsg := ""

Aeval(aArray, {|v,e| cText += Str(e,3) + ": "+cValToChar(v)+CRLF})

MsgInfo(cText, cMsg)

RETURN NIL