Jump to content


Photo

[RESUELTO] ¿Cómo fijar fecha?


  • Please log in to reply
10 replies to this topic

#1 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2092 posts
  • LocationRepública Dominicana

Posted 10 November 2009 - 06:31 AM

Saludos.

Compañeros, tienen alguna idea sobre como pueda fijar fechas con Delphi.

Me refiero a esto, dado dos días (sin mes y sin año) con una diferencia de exactamente 15 días, por ejemplo: día 15 y día 30; con estos datos más una fecha inicio dada yo pueda generar un calendario.

Un ejemplo para ilustrar mejor:
Fecha Inicio: 01/11/2009
Primer Día: 15
Segundo Día: 30
Meses: 4
Resultado
Línea  Fecha
1                  15/11/2009
2                  30/11/2009
3                  15/12/2009
4                  30/12/2009
5                  15/01/2010
6                  30/01/2010
7                  15/02/2010
8                  28/02/2010


Si se dan cuenta pueden notar como cambia el día 28 de Febrero, porque como es sabido el mismo no tiene 30 sino 28 y cuando es bisiesto 29.

De antemano sé que Delphi tiene la función IncDay pero esta realiza la suma matemáticamente y para el caso que necesito no me sirve adecuadamente.
  • 0

#2 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2137 posts

Posted 10 November 2009 - 07:12 AM

El siguiente ejemplo toma la fecha de inicio del TDateTimePicker de nombre DFechaInicio a partir de allí les asigna fechas espaciadas por 15 días a los TDateTimePickers del array. Lo probé y funciona correctamente.



delphi
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls, ComCtrls;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     d1: TDateTimePicker;
  12.     D2: TDateTimePicker;
  13.     d3: TDateTimePicker;
  14.     d4: TDateTimePicker;
  15.     Button1: TButton;
  16.     DFechaInicio: TDateTimePicker;
  17.     procedure Button1Click(Sender: TObject);
  18.   private
  19.     { Private declarations }
  20.   public
  21.     { Public declarations }
  22.   end;
  23.  
  24. var
  25.   Form1: TForm1;
  26.  
  27. implementation
  28.  
  29. {$R *.dfm}
  30.  
  31. procedure TForm1.Button1Click(Sender: TObject);
  32. var
  33.   Dates: array [0 .. 3] of TDateTimePicker;
  34.   Fecha: TDate;
  35.   i: Integer;
  36. begin
  37.   Dates[0] := d1;
  38.   Dates[1] := D2;
  39.   Dates[2] := d3;
  40.   Dates[3] := d4;
  41.   Fecha := DFechaInicio.Date;
  42.   for i := 0 to length(Dates) - 1 do
  43.   begin
  44.     Fecha := Fecha + 15;
  45.     Dates[i].Date := Fecha;
  46.   end;
  47.  
  48. end;
  49.  
  50. end.


  • 0

#3 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 10 November 2009 - 07:18 AM

Si se dan cuenta pueden notar como cambia el día 28 de Febrero, porque como es sabido el mismo no tiene 30 sino 28 y cuando es bisiesto 29.


...¿y despues del dia 28-febrero cual viene?, ¿El 15 de marzo?.

Saludos.
  • 0

#4 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2137 posts

Posted 10 November 2009 - 07:21 AM


Si se dan cuenta pueden notar como cambia el día 28 de Febrero, porque como es sabido el mismo no tiene 30 sino 28 y cuando es bisiesto 29.


...¿y despues del dia 28-febrero cual viene?, ¿El 15 de marzo?.

Saludos.


Efectivamente en el ejemplo que puse acabo de hacer la prueba y si asigna el 15 de marzo.

Saludos
  • 0

#5 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2092 posts
  • LocationRepública Dominicana

Posted 10 November 2009 - 07:42 AM

Saludos.

No lo he probado, pero eso de sumar 15 a mí entender es igual a IncDay(Fecha, Cantidad).

Wilson, mi clase no esta atada a un componente visual, le paso la fecha mediante una propiedad y después de ahí realizo el calculo (lo que estoy tratando de hacer).

Por favor, sigan dando más ideas!!!!
  • 0

#6 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2137 posts

Posted 10 November 2009 - 07:58 AM

Una pregunta: siempre una de las fechas va a ser 1, otra 15 y la otra 30 con execepción de febrero?
  • 0

#7 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2092 posts
  • LocationRepública Dominicana

Posted 10 November 2009 - 08:07 AM

Una pregunta: siempre una de las fechas va a ser 1, otra 15 y la otra 30 con execepción de febrero?


No necesariamente, pero esas son las que mayormente se utilizarían.  Pueden poner día 8 y día 23 para que sean fijos.
  • 0

#8 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2137 posts

Posted 10 November 2009 - 08:15 AM

Pueden poner día 8 y día 23 para que sean fijos.


Hay algo que no termino de entender.

Supongamos que son los días 8 y 23, situemonos en ferbrero, quedaría mas o menos así:

Febrero 8
Febrero 23

¿Según tu necesidad, cuales serían (correctamente) las 4 siguientes fechas?
  • 0

#9 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2092 posts
  • LocationRepública Dominicana

Posted 10 November 2009 - 08:25 AM

Pueden poner día 8 y día 23 para que sean fijos.


Hay algo que no termino de entender.

Supongamos que son los días 8 y 23, situemonos en ferbrero, quedaría mas o menos así:

Febrero 8
Febrero 23

¿Según tu necesidad, cuales serían (correctamente) las 4 siguientes fechas?


Esas fechas de Febrero y luego las demás serían:
Marzo 8
Marzo 23
Abril 8
Abril 23

Si te das cuenta es siempre los mismos días, solo que cambian los meses y el año si es necesario; claro teniendo en cuenta de la pareja 15 y 30 para el mes de Febrero.
  • 0

#10 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4111 posts
  • LocationMadrid - España

Posted 10 November 2009 - 10:11 AM



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   Date: TDateTime;
  4.   i: integer;
  5.   DMin: WORD;
  6.   DMax: WORD;
  7.   Day:  WORD;
  8. begin
  9.   Memo1.Clear;
  10.   Date:= DateTimePicker1.Date;
  11.   DMin:= StrToInt(Edit1.Text);
  12.   DMax:= StrToInt(Edit2.Text);
  13.   for i:=0 to 10 do
  14.   begin
  15.     repeat
  16.     Date:= IncDay(Date);
  17.     Day:= DayOf(Date);
  18.     until (Day = DMin) or (Day = DMax) or
  19.           ((Day = DaysInMonth(Date)) and (Day < DMax));
  20.  
  21.     Memo1.Lines.Add(DateToStr(Date));
  22.   end;
  23. end;



Saludos.
  • 0

#11 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2092 posts
  • LocationRepública Dominicana

Posted 10 November 2009 - 05:03 PM

Saludos.

Gracias escafandra, por esa función es justo lo que necesitaba.

También gracias a todos los interesados en ayudarme! ;)
  • 0




IP.Board spam blocked by CleanTalk.