FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Numero de Semana a lo largo del a帽o
Posts: 103
Joined: Wed May 31, 2006 08:49 AM
Numero de Semana a lo largo del a帽o
Posted: Sat Jun 09, 2007 08:39 AM

Buenas, necesitaria una rutina o funcion que me calcule el numero de semana del a帽o al que pertenece una fecha.

Tiene alguien hecho algo asi o sabe como extraerlo?

Un saludo
Juan Jose

Posts: 654
Joined: Mon May 29, 2006 03:14 PM
Numero de Semana a lo largo del a帽o
Posted: Sat Jun 09, 2007 10:34 AM
Sacado de www.q3.nu/trucomania (lenguaje Delphi)

Prueba este c贸digo:


 	  procedure TForm1.Button1Click(Sender: TObject);
 	   var
 	       frstDay,toDay : TDateTime;
 	       week : Integer;
 	   begin
 	      frstDay := StrToDate('1/1/96');
 	      toDay := StrToDate(Edit1.Text);
 	      week := Trunc((toDay - frstDay) / 7) + 1;
 	      Label1.Caption := IntToStr(week);
 	   end;


Bien, efectivamente, el c贸digo anterior es err贸neo. S贸lo funciona para a帽os que comiencen en lunes.
A ver si esta otra funciona bien...:

 function NumSemana(Fecha:string):integer;
 var
    PrimerDia:TDate;
 begin
     {Calculamos primer dia del a帽o}
     {First day of year}
     PrimerDia:=StrToDate('01/01/'+Copy(Fecha,7,2));

     {Calculamos el numero de semana del a帽o}
     {Calculate the week of year number}
     Result:=Trunc(
                  (StrToDate(Fecha)-
                  PrimerDia+
                  DayOfWeek(PrimerDia)-1
                  ) /7)+1;
 end;


Esta funci贸n supone que el primer dia de la semana es el Domingo (tal como hace la Funci贸n DayOfWeek de Delphi). Para m铆, de toda la vida, la semana comienza en Lunes (en Espa帽a es as铆, y supongo que en otros paises pasar谩 lo mismo), as铆 que tendremos que adecuar la funci贸n para que cuente las semanas a nuestro gusto:


 function NumSemana(Fecha:string):integer;
 var
    PrimerDia:TDate;
    DiaDelPrimerDia:integer;
 begin
     {Calculamos primer dia del a帽o}
     {First day of year}
     PrimerDia:=StrToDate('01/01/'+Copy(Fecha,7,2));

     {Calculamos dia de la semana que empieza por lunes}
     {Calculate the day of week, begining by monday instead of Sunday}
     If DayOfWeek(PrimerDia)-1 =0
       then DiaDelPrimerDia:=7
       else DiaDelPrimerDia:=DayOfWeek(PrimerDia)-1;

     {Calculamos el numero de semana del a帽o}
     {Calculate the week of year number}
     Result:=Trunc(
                  (StrToDate(Fecha)-
                  PrimerDia+
                  DiaDelPrimerDia-1
                  ) /7)+1;
 end;
Mi abuelo dec铆a: Los aviones vuelan porque Dios quiere, y los helic贸pteros ni Dios sabe porque vuelan.

FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Numero de Semana a lo largo del a帽o
Posted: Sat Jun 09, 2007 01:27 PM

Hola,, ve este codigo:

FUNCTION Semana(dFecha)
local nSemanas, nrestoDias, nDiaslSem, nDias, dFechaAux
DEAFULT dFecha := DATE()
IF VALTYPE(dFecha) <> "D"
Retrun(-1)
ENDIF
dFechaAux := CTOD("01/01/" + ALLTRIM(STR(YEAR(dFecha))))
nDias := dFecha - dFechaAux + 1
nSemanas := INT(nDias / 7 )
nRestoDias := nDias % 7
nDiaslSem := 8 - IF(DOW(dFechaAux) - 1 = 0, 7, DOW(dFechaAux) - 1 )
RETURN nSemanas + IF(nDiaslSem >= nRestoDias, 1, 2 )

(Extraido de Librerias en Clipper 5.01 Grupo EIDOS)

Salu2

Posts: 103
Joined: Wed May 31, 2006 08:49 AM
Numero de Semana a lo largo del a帽o
Posted: Sun Jun 10, 2007 11:48 AM

Gracias, lo pruebo.

Un saludo
Juan Jos茅

Continue the discussion