Numero de Semana a lo largo del año

Numero de Semana a lo largo del año

Postby juanjogascem » Sat Jun 09, 2007 8: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
juanjogascem
 
Posts: 102
Joined: Wed May 31, 2006 8:49 am
Location: España

Postby JmGarcia » Sat Jun 09, 2007 10:34 am

Sacado de www.q3.nu/trucomania (lenguaje Delphi)

Prueba este código:


Code: Select all  Expand view  RUN
     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...:

Code: Select all  Expand view  RUN
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:


Code: Select all  Expand view  RUN
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
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Postby Willi Quintana » Sat Jun 09, 2007 1: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
User avatar
Willi Quintana
 
Posts: 1022
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Postby juanjogascem » Sun Jun 10, 2007 11:48 am

Gracias, lo pruebo.

Un saludo
Juan José
juanjogascem
 
Posts: 102
Joined: Wed May 31, 2006 8:49 am
Location: España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 33 guests