Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   como sumar una fecha (https://www.clubdelphi.com/foros/showthread.php?t=47716)

esimon 05-09-2007 19:06:15

como sumar una fecha
 
Hola como esta?

Tengo una tabla llamada Hoteles, en la cual tengo dos campos de fecha
Fecha_Renovacion y proxima_fecha_renovacion, estos campos son tipo Date/Time y estoy utilizando Access lo que quiero hacer es lo siguiente:

cuando yo digite una fecha en el campo Fecha_Renovacion, en el campo Proxima_Fecha_Renovacion me muetre un año depues de la fecha de renovacion.

Ej. Fecha_Renovacion = 14/11/2007
Proxima_Fecha_Renovacion 14/11/2008, esto es porque la renovaciones se hacen anual.

mucha gracias

jhonny 05-09-2007 19:21:55

Revisa la función IncYear que se encuentra en la unidad DateUtils y la cual se usa, asi:

Código Delphi [-]
//Esto te devolvera un año mas adelante que Fecha_Renovacion
ProximaFechaRenovacion := IncYear(Fecha_Renovacion);

Si quieres mas años tendras que pasarle el segundo parametro, asi, por ejemplo:

Código Delphi [-]
//Esto te devolvera dos años mas adelante que Fecha_Renovacion
ProximaFechaRenovacion := IncYear(Fecha_Renovacion, 2);

Espero te sirva ;).

esimon 05-09-2007 21:36:54

mucha gracias jhonny por tu informacion, no pude resolver con el codigo que me dige, pero si algo como esto

Código:

var
  Frm_GiftShop: TFrm_GiftShop;
  Fecha_soporte : Tdate;
  DD, MM, AA  : word;

Código:

procedure TFrm_GiftShop.Tbl_GiftShopFecha_RenovacionChange(Sender: TField);
begin
  // Fecha_Soporte := Tbl_GiftShopFecha_Renovacion.Value;
    DecodeDate(Fecha_Soporte, DD, MM, AA);
    AA := AA + 1;
    Tbl_GiftShopFecha_Pendiente_Renovacion.Value := Fecha_Soporte;
end;

pero resulta cuando instroduco la fecha en el campo fecha_renovacion, en la proxima fecha a renovar siempre sale la misma no se que estoy haciendo mal.

jhonny 05-09-2007 21:41:28

Cita:

Empezado por esimon (Mensaje 228644)
mucha gracias jhonny por tu informacion, no pude resolver con el codigo que me dige, pero si algo como esto

Con que Delphi estas trabajando y porque no te funciona, sale algun error?, deberia funcionarte, yo lo he probado con D6.

esimon 05-09-2007 21:51:20

estoy usando Delphi 7

jhonny 05-09-2007 21:55:12

Cita:

Empezado por esimon (Mensaje 228651)
estoy usando Delphi 7

Bueno, entonces debe funcionarte, recuerda que debes agregar la unidad DateUtils.

eduarcol 05-09-2007 21:57:17

Deberia funcionar, de hecho yo trabajo con incmonth en lugar de incyear y va de maravillas asi como te dice jhonny danos info sobre porq no te funciona

marcoszorrilla 05-09-2007 21:57:42

Tiene razón jhonny, yo hago esta prueba con Delphi 7 utilizando variables en vez de campos y funciona perfectamente.
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
f1:TDate;
f2:TDate;
begin
f1:=Date;
f2:=IncYear(f1);
edit1.Text:=FormatDateTime('dd/mm/yyyy',f2);
end;

Un Saludo.

esimon 05-09-2007 22:15:48

gracias nuevamente por darme luz en la oscuridad, cuando me dice que tengo que agregar la unidad, aque te esta refiriendo

Cita:

Empezado por jhonny (Mensaje 228653)
Bueno, entonces debe funcionarte, recuerda que debes agregar la unidad DateUtils.

espero que comprenda el poco conocimiento, sobre la porgramacion

maeyanes 05-09-2007 22:17:06

Checa en la unidad donde quieres hacer la suma de fechas, debes tener una sección llamada implementation:

Código Delphi [-]
implementation

uses DateUtils; // agregas la unidad DateUtils


Saludos...

jhonny 05-09-2007 22:20:54

Cita:

Empezado por esimon (Mensaje 228661)
gracias nuevamente por darme luz en la oscuridad, cuando me dice que tengo que agregar la unidad, aque te esta refiriendo

espero que comprenda el poco conocimiento, sobre la porgramacion

Ahhh, :), mira, en la parte superior de la unidad debe decir una cosa parecida a esta:

Código Delphi [-]
unit Prueba;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, RxMemDS, StdCtrls, DBTables, ComCtrls, Grids, DBGridEh, ExtCtrls,
  ToolWin, ImgList, PrnDbgeh, SrwTypes, DBCtrls, Math, GridsEh;

Entonces cuando te digo que necesitas agregar la unidad DateUtils, quiere decir que a todas esas unidades que vez allí relacionadas, debes agregarle la DateUtils, lo cual quedaria asi:

Código Delphi [-]
unit Prueba;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, StdCtrls, DBTables, ComCtrls, Grids, ExtCtrls,
  ToolWin, ImgList, DBCtrls, Math, GridsEh, DateUtils;

Espero te sirva ;).

Nota: Parece que maeyanes se a adelantado :).

esimon 06-09-2007 14:38:03

muy buen dia a todos y mil gracias nuevamente por toda la atencion prestada.
jhonny ya hice la declaracion, pero me dice que la fecha_renovacion y proxima_fecha_renovar no estan declarada, ya esta eso me dice que tengo que desclararla, me gustaria que me siga arrojando un poco mas de luz y es posible.

mil gracias

jhonny 06-09-2007 14:45:21

Donde las tienes declaradas, eso solo lo sabes vos, ya que vos mismo haz dicho que son unos campos de la base de datos, entonces, solo basta con que coloques alli dichos campos, en lugar de las variables que te mostre como ejemplo ;).

duilioisola 06-09-2007 14:47:49

Lo que creo que falta aquí es el EncodeDate

Código:

procedure TFrm_GiftShop.Tbl_GiftShopFecha_RenovacionChange(Sender: TField);
var dd,mm,aa : word;
begin
  // Fecha_Soporte := Tbl_GiftShopFecha_Renovacion.Value;
    DecodeDate(Fecha_Soporte, DD, MM, AA);
    AA := AA + 1;
    Fecha_Soporte := EncodeDate(DD, MM, AA);
    Tbl_GiftShopFecha_Pendiente_Renovacion.Value := Fecha_Soporte;
end;

Tambien podría ser :

Código:

procedure TFrm_GiftShop.Tbl_GiftShopFecha_RenovacionChange(Sender: TField);
var dd,mm,aa : word;
begin
  // Fecha_Soporte := Tbl_GiftShopFecha_Renovacion.Value;
    DecodeDate(Fecha_Soporte, DD, MM, AA);
    Fecha_Soporte := EncodeDate(DD, MM, AA + 1);
    Tbl_GiftShopFecha_Pendiente_Renovacion.Value := Fecha_Soporte;
end;


esimon 06-09-2007 19:02:12

Cita:

Empezado por duilioisola (Mensaje 228845)
Lo que creo que falta aquí es el EncodeDate

Código:

procedure TFrm_GiftShop.Tbl_GiftShopFecha_RenovacionChange(Sender: TField);
var dd,mm,aa : word;
begin
  // Fecha_Soporte := Tbl_GiftShopFecha_Renovacion.Value;
    DecodeDate(Fecha_Soporte, DD, MM, AA);
    AA := AA + 1;
    Fecha_Soporte := EncodeDate(DD, MM, AA);
    Tbl_GiftShopFecha_Pendiente_Renovacion.Value := Fecha_Soporte;
end;

Tambien podría ser :

Código:

procedure TFrm_GiftShop.Tbl_GiftShopFecha_RenovacionChange(Sender: TField);
var dd,mm,aa : word;
begin
  // Fecha_Soporte := Tbl_GiftShopFecha_Renovacion.Value;
    DecodeDate(Fecha_Soporte, DD, MM, AA);
    Fecha_Soporte := EncodeDate(DD, MM, AA + 1);
    Tbl_GiftShopFecha_Pendiente_Renovacion.Value := Fecha_Soporte;
end;


no puedo cansarme de darles las gracias a todos por ayudarme a resolver este problema.

duiliosola, estuve provando con la runtida que me enviaste pero me esta sumando el dia no el año, solo quiero sumarle uno al año.

esimon 06-09-2007 19:13:15

tengo que agradecele a todos los que me ayudaron por la experician que expresan se puede decir que es dudoso que yo pueda ayudarlo pero nadie sabe para mi seria mas que un placer poder ayudarlo en algo y a ti jhonny que no puede usar la rutina que me enviaste pero voy a tratar de ver como puedo usarla para aprendermela y aqui pongo la rutina que use, por si otro tiene la misma inquitud que yo.

[code]
procedure TFrm_GiftShop.Tbl_GiftShopFecha_RenovacionChange(Sender: TField);
begin
Fecha_Soporte := Tbl_GiftShopFecha_Renovacion.Value;
DecodeDate(Fecha_Soporte, AA, MM, DD);
AA := AA + 1;
Fecha_Soporte := EncodeDate(AA, MM, DD);
Tbl_GiftShopFecha_Pendiente_Renovacion.Value := Fecha_Soporte;
end;
[/codo]
es la misma que me envio duiliodola, la unica diferencia esta en la decodificacion de la fecha.

mil gracias a todos sigan pasandola bien

maeyanes 06-09-2007 19:19:07

Pusiste en el uses de la unidad la referencia a la unidad DateUtils?

Con esa unidad solo tienes que hacer:

Código Delphi [-]
procedure TFrm_GiftShop.Tbl_GiftShopFecha_RenovaciónChange(Sender: TField);
var
  Fecha_Soporte: TDateTime;

begin
  Fecha_Soporte := Sender.Value;
  IncYear(Fecha_Soporte);
  Tbl_GiftShopFech_Pendiente_Renovacion.Value := Fecha_Soporte
end;


Saludos...


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

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