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 08-06-2012
Avatar de microbiano
microbiano microbiano is offline
Miembro
 
Registrado: sep 2008
Ubicación: Mexico D.F
Posts: 349
Poder: 16
microbiano Va por buen camino
Ayuda con funcion para Determinas meses

hola amigos recurro nuevamente a ustedes para poder realizar esta tarea.

quiero mostrar en un grid lo siguiente

periodo |meses


Enero 2010 -Diciembre 2010 | 12
Enero 2011 -Diciembre 2011 | 12
Enero 2012 -Junio 2012 | 6

La fecha Inicial seria 01/014/2010, esta puede variar dependiendo de la fecha de registro de un cliente
La fecha Final: es la Fecha que tiene el servidor que para el dia de hoy es 08/06/2012.

alguna sugerencia Amigos.

de antmano muchas gracias amigos se los agradezco mucho.
Responder Con Cita
  #2  
Antiguo 08-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que has olvidado unos poquitos de datos
Responder Con Cita
  #3  
Antiguo 08-06-2012
Avatar de microbiano
microbiano microbiano is offline
Miembro
 
Registrado: sep 2008
Ubicación: Mexico D.F
Posts: 349
Poder: 16
microbiano Va por buen camino
es que no tengo idea de como iniciar la funcion o prodecimiento; los datos de entrada son:

Fecha Inicial : La tomo de una base de datos dependiendo del clientes

Fecha Final : es la que Tiene el servidor a la hora de hacer la consulta.

Ejemplo:

Cliente : Horacio Xochitemol
Fecha de Registro: 25/10/1980
Fecha del Servidor: 08/06/2012

funcion Meses(Fecha1:Tdate, Fecha2:Tdate)Date;
begin
determinar lo siguientes
periodo meses
noviembre 1980 - Diciembre 1980 2
Enero 1981 -diciembre 1981 12
enero 1982-diciembre 1982 12
Etc.....

Enero 2012-Junio 2012 6
end;


creo que es algo asi.
Responder Con Cita
  #4  
Antiguo 08-06-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola microbiano.

No se entiende bién lo que deseas hacer, por lo que veo pareciera que deseas obtener los meses entre dos fechas incluyendo los meses de la fecha incial y final....

Si es así podrías hacer:
Código Delphi [-]
uses DateUtils;

function Lapso(const f1, f2: TDate): Integer;
begin
  if (YearOf(f1)=YearOf(f2))and(MonthOf(f1)=MonthOf(f2)) then
    Result:= 1
  else
    Result:= MonthsBetween(f1, f2) + 2;
end;
Pero creo que debes explicar con más detalle cuál es el resultado que pretendes obtener.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 08-06-2012
Avatar de microbiano
microbiano microbiano is offline
Miembro
 
Registrado: sep 2008
Ubicación: Mexico D.F
Posts: 349
Poder: 16
microbiano Va por buen camino
lo que quiero hacer es saber cuantos años han pasado y cuantos meses por año.

Última edición por microbiano fecha: 08-06-2012 a las 20:42:50.
Responder Con Cita
  #6  
Antiguo 08-06-2012
[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
Hola...

Si bien entiendo el desea, dado un rango de fechas (una fecha inicial y la fecha actual del servidor de bd), obtener subrangos de fechas limitados por años:

Código:
F. Inicial: 23/04/2010
F. Actual: 08/06/2012

Rangos:
Abril 2010 - Diciembre 2010 | 9 meses
Enero 2011 - Diciembre 2011 | 12 meses
Enero 2012 - Junio 2012     | 6 meses


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #7  
Antiguo 08-06-2012
Avatar de microbiano
microbiano microbiano is offline
Miembro
 
Registrado: sep 2008
Ubicación: Mexico D.F
Posts: 349
Poder: 16
microbiano Va por buen camino
si amigo es correcta tu observacion amigo [maeyanes], eso es lo que necesito
Responder Con Cita
  #8  
Antiguo 18-06-2012
Avatar de microbiano
microbiano microbiano is offline
Miembro
 
Registrado: sep 2008
Ubicación: Mexico D.F
Posts: 349
Poder: 16
microbiano Va por buen camino
Este es el reusltado de lo que quiero

amigos este es el resultado de lo que quiero, me gustaria poder llegar a este resultado, pero no lo consigo espero me puedan ayudar.


muchas gracias
Imágenes Adjuntas
Tipo de Archivo: jpg Resultado.jpg (7,8 KB, 12 visitas)
Responder Con Cita
  #9  
Antiguo 18-06-2012
fpirovani fpirovani is offline
Miembro
 
Registrado: feb 2008
Ubicación: Entre Rios, Argentina
Posts: 24
Poder: 0
fpirovani Va por buen camino
MonthsBetween

Hola microbiano!

Agregando al uses la unidad DateUtils podes usar la funcion MonthsBetween, que hace exactamente lo que estas necesitando.

Espero te sirva.
Saludos !
Responder Con Cita
  #10  
Antiguo 18-06-2012
Avatar de microbiano
microbiano microbiano is offline
Miembro
 
Registrado: sep 2008
Ubicación: Mexico D.F
Posts: 349
Poder: 16
microbiano Va por buen camino
estoy sacando los mese asi

Código Delphi [-]
function tfrmrecibos.MesesANombres(D1, D2: TDate): TStrings;
var
   i,ii, Mes, TotMeses,TotAnios: Integer;
   AnioIni,MesIni,DiaIni,AnioFin,MesFin,DiaFin: word;
begin
  DecodeDate(D1,AnioIni,MesIni,DiaIni);
  D1:= EncodeDate(AnioIni , MesIni,1);//pongo el dia 1 al mes
  DecodeDate(D2,AnioFin,MesFin,DiaFin);
  D2:= EncodeDate(AnioFin,MesFin, daysInMonth(D2));//Pongo el ultimo dia del Mes
  Result:= TStringList.Create;
  TotMeses:= MonthsBetween(D1, D2);
  TotAnios:=YearsBetween(D1,D2);
  Mes:= MonthOf(D1);
  for ii:= MonthOf(D1) to TotMeses + MonthOf(D1)-1 do
    begin
        if Mes = 12 then
          Mes:= 1
        else
          Inc(Mes);
        Result.Add(LongMonthNames[Mes]+' '+IntTostr(i));
    end;
end;

voy a tratar de sacar los años y demas datos.
Responder Con Cita
  #11  
Antiguo 20-06-2012
Avatar de microbiano
microbiano microbiano is offline
Miembro
 
Registrado: sep 2008
Ubicación: Mexico D.F
Posts: 349
Poder: 16
microbiano Va por buen camino
bueno estoy en eso creo que me estoy complicando demaciado

bueno ahora lo que hice fue sacarlo mas o menos asi lo que no se es como cambiar de año y que considere de enero a la fecha del calendario jejejejeje.

Código Delphi [-]
function tfrmrecibos.MesesANombres(D1, D2: TDate): TStrings;
var
   i,ii, Mes, TotMeses,TotAnios: Integer;
   Anio,AnioIni,MesIni,DiaIni,AnioFin,MesFin,DiaFin: word;
begin
  DecodeDate(D1,AnioIni,MesIni,DiaIni);
  D1:= EncodeDate(AnioIni , MesIni,1);//pongo el dia 1 al mes
  DecodeDate(D2,AnioFin,MesFin,DiaFin);
  D2:= EncodeDate(AnioFin,MesFin, daysInMonth(D2));//Pongo el ultimo dia del Mes
  Result:= TStringList.Create;
  TotMeses:= MonthsBetween(D1, D2);
  TotAnios:=YearsBetween(D1,D2);
  Mes:= MonthOf(D1);
  for i:=AnioIni to AnioFin do
   begin
    Anio:=i;
    DecodeDate(D1,Anio,MesIni,DiaIni);
    DecodeDate(D2,Anio,MesFin,DiaFin);
    D1:= EncodeDate(i , MesIni,1);//pongo el dia 1 al mes creo que aqui es a donde tendria que considerar los meses de cada año 
    D2:= EncodeDate(i,MesFin, daysInMonth(D2));//Pongo el ultimo dia del Mes creo que aqui es a donde tendria que considerar los meses de cada año
    TotMeses:= MonthsBetween(D1, D2);
    Result.Add(IntTostr(i)+ '  -     '+ IntToStr(TotMeses));//imprimo el año y el numero de meses
   end;
end;
Responder Con Cita
  #12  
Antiguo 20-06-2012
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Hola.

Te respondo rápidamente, pues no he leído todas las respuestas a tu pregunta original. Pero creo que lo que buscas es esto:

Código Delphi [-]
uses DateUtils;

function MesesTranscurridos(const F1, F2: TDate): Integer;
begin
  Assert(F2>=F1, 'La fecha 2 debe ser mayor que la fecha 1');
  F1 := StartOfTheMonth(F1);
  F2 := EndOfTheMonth(F2) + 1;
  Result := MonthsBetween(F1, F2);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := Format('Meses entre %s - %s = %d', [DateToStr(DateTimePicker1.Date)
    , DateToStr(DateTimePicker2.Date), MesesTranscurridos(DateTimePicker1.Date, DateTimePicker2.Date)]);
end;

El código lo he escrito aquí mismo y quizás haya algún error de sintaxis, eso te lo dejo a vos.

Un saludo.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #13  
Antiguo 21-06-2012
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Cita:
Empezado por jachguate Ver Mensaje
Hola.

Te respondo rápidamente, pues no he leído todas las respuestas a tu pregunta original. Pero creo que lo que buscas es esto:

Código Delphi [-]
uses DateUtils;  function MesesTranscurridos(F1, F2: TDate): Integer;
 begin
   Assert(F2>=F1, 'La fecha 2 debe ser mayor que la fecha 1');
   F1 := StartOfTheMonth(F1); 
  F2 := EndOfTheMonth(F2) + 1; 
  Result := MonthsBetween(F1, F2);
 end; 
 procedure TForm1.Button1Click(Sender: TObject);
 begin  
 Label1.Caption := Format('Meses entre %s - %s = %d', [DateToStr(DateTimePicker1.Date) ,
 DateToStr(DateTimePicker2.Date), MesesTranscurridos(DateTimePicker1.Date, DateTimePicker2.Date)]);
 end;
El código lo he escrito aquí mismo y quizás haya algún error de sintaxis, eso te lo dejo a vos.

Un saludo.
Hay que quitar la palabra const de la función MesesTranscurridos.

Un Saludo
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.

Última edición por marcoszorrilla fecha: 21-06-2012 a las 21:55:10.
Responder Con Cita
  #14  
Antiguo 22-06-2012
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Mil gracias Marcos!!!

Igual, ahora que vi con más calma la (mal redactada) pregunta, creo que la solución iba un poco más allá:

Código Delphi [-]
uses DateUtils;

{$R *.dfm}

function MesesTranscurridos(F1, F2: TDate): Integer;
begin
  F1 := StartOfTheMonth(F1);
  F2 := EndOfTheMonth(F2) + 1;
  Result := MonthsBetween(F1, F2);
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  Year: Word;
  F1, F2: TDate;
begin
  Memo1.Lines.Clear;
  for Year := YearOf(DateTimePicker1.Date) to YearOf(DateTimePicker2.Date) do
  begin
    if Year = YearOf(DateTimePicker1.Date) then
      F1 := DateTimePicker1.Date
    else
      F1 := EncodeDate(Year, 1, 1);
    if Year = YearOf(DateTimePicker2.Date) then
      F2 := DateTimePicker2.Date
    else
      F2 := EncodeDate(Year, 12, 31);
    Memo1.Lines.Add(Format('%s - %s: %d meses', [
        FormatDateTime('mmmm ''de'' yyyy', F1)
      , FormatDateTime('mmmm ''de'' yyyy', F2)
      , MesesTranscurridos(F1, F2)
      ]));
  end;
end;

El resultado es este:



Un saludo.

pd. Me pregunto donde está Tonatiuh? <---- favor no responder es una pregunta interna.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
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
Ayuda con Rango de Fechas y meses microbiano Varios 2 06-06-2012 04:30:49
Ayuda para validar un Dato de Tipo Boleano en funcion microbiano Varios 3 05-05-2012 08:16:39
Ayuda con la función Right Javi2 SQL 5 27-12-2007 21:59:57
Funcion para sumar meses? patorecalde MS SQL Server 2 21-08-2007 20:24:17
Ayuda con una función McRight2k Varios 1 13-08-2003 21:47:04


La franja horaria es GMT +2. Ahora son las 09:01:46.


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