Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-09-2007
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Rango de Semanas en un mes

Hola a todos

Como puedo obtener los rangos de las semanas de un mes X. por ejemplo mes de agosto tiene 5 semanas (1-5, 6-12, 13-19, 20-26, 27-31), eso es lo que quiero saber donde empieza y termina digamos la semana 1 que seria del 1 de agosto al 5 de agosto. Me pueden dar ideas por favor, que funciones de fechas debo usar mas o menos.

Lo unico que he encontrado es saber cuantas semanas tiene un mes con la función WeekOfTheMonth.

Muchisimas gracias por adelantado y que tengan un bonito dia.
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.

Última edición por Caro fecha: 12-09-2007 a las 17:57:00.
Responder Con Cita
  #2  
Antiguo 12-09-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
No creo que tengas una función que te dé el resultado que buscas.

Tendrás que hacerla tu.

El principio de dicha función sería más o menos el siguiente:

1. Todos los meses empiezan por 1 ! (Trivial).
2. Saber el día de la semana del primer día del mes que buscas. (Función DayOfTheWeek). Tendrás que componer tu la fecha del primer mes que buscas con Encode.
3. A 8 le restas el resultado obtenido y tendrás el día final de la 1a semana.
4. A partir de ahí puedes obtener facilmente el resto de las semanas, teniendo en cuenta el número máximo de días que tenga el mes que estes tratando.

Espero haberte ayudado.

Saludos
__________________
Piensa siempre en positivo !
Responder Con Cita
  #3  
Antiguo 12-09-2007
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Muchisimas gracias Gluglu, asi me ha quedado con tu explicación, solo funciona para el mes de agosto, ya es facil aumentar para que funcione cualquier mes.

Código Delphi [-]
var
 fechaIni,fechaFin:TDateTime;
 i, diaIni,diaFin,dia31, cantSem, cantDias :Integer;
begin

 fechaIni := EncodeDate(2007, 08, 01);
 cantSem := WeekOfTheMonth(EncodeDate(2007, 08, 31));

 diaIni := DayOfTheWeek(fechaIni);
 diaFin := 7-diaIni;

 fechaFin := IncDay(fechaIni, diaFin);

 showmessage(DateToStr(fechaIni)+'-'+DateToStr(fechaFin));
 for i:=2 to cantSem do
 begin
  fechaIni:=IncDay(fechaFin,1);

  if i=cantSem then
  begin
   cantDias := DaysInAMonth(2007,8);
   dia31 := DayOfTheWeek(EncodeDate(2007, 08, cantDias));
   fechaFin := IncDay(FechaFin,dia31)
  end
  else
   fechaFin:=IncDay(fechaFin,7);
   
  showmessage(DateToStr(fechaIni)+'-'+DateToStr(fechaFin));
 end;


Dime que te parece o puedo mejorarlo.
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #4  
Antiguo 12-09-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Creo que se podría optimizar de esta manera :

Código Delphi [-]
var
   fechaIni, fechaFin : TDateTime;
   i : Integer;
begin

  i := 1;
 
  while true do begin
 
    fechaIni := EncodeDate(2007, 08, i);
    if DayOfTheWeek(fechaIni) <> 1 then begin
      fechaFin := EncodeDate(2007, 08, 8-DayOfTheWeek(fechaIni))
      i := 8-DayOfTheWeek(fechaIni) + 1;
    end
    else begin
      i := i + 7;
      if i > DaysInAMonth(2007,8) then 
        fechafin := EndOfTheMonth(fechaIni)
      else
        fechaFin := DayInc(fechaIni,7);
    end;

    showmessage(DateToStr(fechaIni)+'-'+DateToStr(fechaFin));
 
    if i > DaysInAMonth(2007,8) then Break;
 
  end;
 
end;

No lo he probado, por lo que no te puedo asegurar si funciona correctamente.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #5  
Antiguo 12-09-2007
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Muchas gracias de nuevo, ya lo he probado y funciona perfectamente, solo faltaba esto.

fechaFin := EncodeDate(2007, 08, 8-DayOfTheWeek(fechaIni)) un ; al final

fechaFin := DayInc(fechaIni,7); -> fechaFin := IncDay(fechaIni,6);

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #6  
Antiguo 12-09-2007
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Aquí te dejo una función que recibe un año y mes cualquiera y te va mostrando los rangos de las semanas del mes:

Código Delphi [-]
procedure ShowWeekRanges(AYear, AMonth: Word);
var
  StartDay: Integer;
  DaysInMonth: Integer;
  EndDay: Integer;

begin
  StartDay := 1;
  DaysInMonth := DaysInAMonth(AYear, AMonth);
  EndDay := 8 - DayOfWeek(EncodeDate(AYear, AMonth, 1));
  repeat
    ShowMessage(Format('%d - %d', [StartDay, EndDay]));
    StartDay := EndDay + 1;
    Inc(EndDay, 7);
    if EndDay > DaysInMonth then
      EndDay := DaysInMonth
  until
    StartDay > DaysInMonth;
end;


Saludos...

Última edición por maeyanes fecha: 12-09-2007 a las 20:35:09. Razón: Modificación del código
Responder Con Cita
  #7  
Antiguo 13-09-2007
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Muchas gracias a ti también maeyanes.
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Un par de semanas en la Ciudad de México Al González La Taberna 13 23-06-2007 21:03:07
rango valido FGarcia Varios 2 28-04-2006 02:51:01
Consulta Mensual en semanas el_enigma1 SQL 5 17-05-2004 16:43:59
numero de semanas entre 2 fechas marrullas SQL 1 10-05-2004 20:21:18
Saber semanas de un mes ignasi Varios 2 17-03-2004 10:35:36


La franja horaria es GMT +2. Ahora son las 00:57:20.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi