Hallar el número de semana del año de una fecha  

Enviado Por: Q3 Team
Web : www.q3.nu
Email: dlib@q3.nu
Fecha: 29/07/99

Truco accedido 330 veces

 


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;



Ahora os queda a vosotros probarla...