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 Dias a una fecha (https://www.clubdelphi.com/foros/showthread.php?t=58677)

esimon 28-07-2008 16:47:42

como sumar Dias a una fecha
 
Muy buen dia para todo, espero que me disculpen se que hay mucho hilo con esta pregunta pero no pude adactar uno a lo que yo quiero hacer o necesito.

lo que quiero hacer es sumarle a un DateTimePicker el numero que digite en un Edit, sin que me tome los dias de fiesta. ej.

si hoy es lunes 28/07/2008 y en el Edti digito un 5 el DateTimePicker seria
04/08/2008, eso es lo que quiero.


mil gracias

Caro 28-07-2008 17:20:00

Hola esimon, sería mas o menos así:

Código Delphi [-]
var
 cont : Integer;
 Fecha : TDateTime;
begin
 Fecha := Now;
 cont := 1;
 While cont<=StrToInt(Edit1.Text) do
  begin
   Fecha := IncDay(Fecha, 1);
   if (DayOfTheWeek(Fecha)<>6) and (DayOfTheWeek(Fecha)<>7) then
    inc(cont);
  end;
 DateTimePicker1.Date := Fecha;

DayOfTheWeek, nos devuelve el día de la semana.

Saluditos

esimon 28-07-2008 17:41:53

mil gracias Caro, por la repuesta no dije que estoy usando delphi 7 y Accesse, otra cosa quien es IncDay y DayOfTheWeek porque me dice que no esta declarada.

Caro 28-07-2008 17:59:18

Hola de nuevo esimon, tienes que aumentar en tu uses la unidad DateUtils, que es ahí donde estan esas dos funciones, IncDay, te incrementa la cantiadad de días que tu le indiques en tu caso 1 y DayOfTheWeek nos devuelve el día de la semana de la fecha que le pasas como parametro 6->sabado y 7->domingo.

Saluditos

esimon 28-07-2008 18:57:21

mucha gracias caro, esta funcionando a la perfeccion

esimon 28-07-2008 19:15:49

mucha gracias caro, esta haciendo lo que yo quiero, pero el DateTimePicker siempre me muestra la fecha actual si importar la modificacion del registro. te puedo hacer un ej. con la fecha del hoy, el DateTimePicker tiene fecha de 28/07/2008 si en el edit digito un numero 5, el DateTimePicker sera 04/07/2008, eso quiere decir que esta funcionando, grabo mi registro. pero si vuelvo al mismo registro el DateTimePicker es igual a 28/07/2008 cuando tiene que tener la fecha de 04/07/2008, puede decirme que esta pasando.

Delphius 28-07-2008 22:32:35

Cita:

Empezado por esimon (Mensaje 303898)
mucha gracias caro, esta haciendo lo que yo quiero, pero el DateTimePicker siempre me muestra la fecha actual si importar la modificacion del registro. te puedo hacer un ej. con la fecha del hoy, el DateTimePicker tiene fecha de 28/07/2008 si en el edit digito un numero 5, el DateTimePicker sera 04/07/2008, eso quiere decir que esta funcionando, grabo mi registro. pero si vuelvo al mismo registro el DateTimePicker es igual a 28/07/2008 cuando tiene que tener la fecha de 04/07/2008, puede decirme que esta pasando.

Hola esimon, sin saber que componentes estás usando y el modo en que lo estás empleando no sabríamos decirte a que se debe tu problema. ¿Podrías por favor darnos más detalles del asunto? Si es posible, una demostración del código.

Saludos,

Caro 29-07-2008 02:12:45

Cita:

Empezado por esimon (Mensaje 303898)
mucha gracias caro, esta haciendo lo que yo quiero, pero el DateTimePicker siempre me muestra la fecha actual si importar la modificacion del registro. te puedo hacer un ej. con la fecha del hoy, el DateTimePicker tiene fecha de 28/07/2008 si en el edit digito un numero 5, el DateTimePicker sera 04/07/2008, eso quiere decir que esta funcionando, grabo mi registro. pero si vuelvo al mismo registro el DateTimePicker es igual a 28/07/2008 cuando tiene que tener la fecha de 04/07/2008, puede decirme que esta pasando.

Hola esimon, sobre el codigo que te puse, esta tomando la fecha actual con Now, por lo que sería mejor que pases lo que tienes en tu DateTimePicker, que al parecer no siempre sera la fecha actual.

Código Delphi [-]
var
 cont : Integer;
 Fecha : TDateTime;
begin
  Fecha := DateTimePicker1.Date;
  cont := 1;
  While cont<=StrToInt(Edit1.Text) do
  .........
  .......

Ahora sobre tu problema, como te dice Marcelo, danos mas detalles para que te podamos ayudar y pon el codigo donde crees que este tu problema.

Saluditos

esimon 02-08-2008 14:54:01

mucha gracias Caro y Delphius, por dedicarme parte de tu apreciado tiempo.

Estoy haciendo un sistema para supervisar establecimientos, pero dentro de esa supervision a un establecimiento X, le puedo dar un plazo de 1o dias laborables para hacerle una numeva supervision para que corrijar algunos problemas que se encontraron en dicho establecimiento, claro estoy 10 dias son laborable, sin incluir los dias feriados, sabado ni domingos.

para que el sistema haga esa parte automaticamente, uso un Edtit en el cual digito la cantidad de dias y un DeteTimePicke, para que me muestre la fecha que le toma la supervision a dicho establecimiento y estoy usando el codigo que me envio caro.

Código:

var
 cont : Integer;
 Fecha : TDateTime;
begin
 Fecha := Now;
 cont := 1;
 While cont<=StrToInt(Edit1.Text) do
  begin
  Fecha := IncDay(Fecha, 1);
  if (DayOfTheWeek(Fecha)<>6) and (DayOfTheWeek(Fecha)<>7) then
    inc(cont);
  end;
 DateTimePicker1.Date := Fecha;

Con este codigo cuando yo le digo a un establecimeinto que tienex dia para la proxima inspeccion en el DateTimePicke me hace el calculo y me lo graba en la tabla, pero si entro a ese establecimiento el DateTimePicke me presenta la fecha actual y no la que le correposnde con el plazo establecido.

Delphius 02-08-2008 15:04:21

Hola esimon,
Yo no veo problema en el cálculo de los días. Es posible que el problema lo tengas al insertar los datos. Por favor, ¿Podrías mostrarnos el código que empleas para guardar? ¿Que componentes de acceso a base a datos usas?¿Motor?

Saludos,

esimon 02-08-2008 15:13:03

gracias Delphius, nuevamente.

como dije anteriormente uso delphi 7 y accesse 2003, para insertar uso este codigo
Código:


procedure TFrm_Agencia.SpeedButton6Click(Sender: TObject);
begin
      Tbl_Agencias.Insert;
             
end;

y para grabar este.

Código:


procedure TFrm_Agencia.SpeedButton5Click(Sender: TObject);
begin
      if Tbl_Agencias.State in [dsEdit, dsInsert] then
          Tbl_AgenciasNumero_Provincia.Value := Tbl_ProvinciaNumero_Provincia.Value;
          Tbl_AgenciasNumero_Localidad.Value := Tbl_LocalidadNumero_Localidad.Value;
        //  DateTimePicker1.Date := Tbl_AgenciasFecha_Pendiente_Inspeccion.Value;
          Tbl_AgenciasFecha_Pendiente_Inspeccion.Value := DateTimePicker1.Date;
          Tbl_Agencias.Post;
end;


Delphius 02-08-2008 18:30:47

Hola esimon,
No veo problema en el código, es más hice una prueba y funciona.

Me gustaría que por favor me indicaras que componentes usas. Yo probé con ADO y he empleado el Proveedor Microsoft Jet 4.0 OLE DB tan ampliamente usado.

¿Usas otros componentes y/o tecnología de acceso a la base de datos? No se por donde vendrá el problema, pero no veo problemas en ese código... el error puede venir de otro lado.

Dices que la fecha no la guarda adecuamente ¿sólo la fecha? ¿guarda los otros campos? ¿Te aseguraste de que la tabla Provincia y Localidad estén abiertas? ¿El cursor está en algún registro válido?

Hay muchas cosas por analizar... pero por lo pronto, en ese código no veo algo raro.

Saludos,

mamcx 02-08-2008 19:01:25

Creo que el problema es la forma de manejo del control.

El TDateTimePicker no permite calculos sobre las fechas, solo seleccionarlas.

Lo que quieres requiere un control nuevo, que combine el Pivker con un Edit personalizado que haga mask dinamico y esas cosas, porque por codigo esta ok.

Una inspiracion:

http://www.datejs.com/

enecumene 03-08-2008 00:13:08

Cita:

Empezado por mamcx (Mensaje 305318)
...

Una inspiracion:

http://www.datejs.com/

Vaya que inspiracion, gracias por el link amigo me ha encantado el pequeño script.

Saludos.

egostar 03-08-2008 04:54:48

Cita:

Empezado por esimon
mucha gracias caro, esta haciendo lo que yo quiero, pero el DateTimePicker siempre me muestra la fecha actual si importar la modificacion del registro. te puedo hacer un ej. con la fecha del hoy, el DateTimePicker tiene fecha de 28/07/2008 si en el edit digito un numero 5, el DateTimePicker sera 04/07/2008, eso quiere decir que esta funcionando, grabo mi registro. pero si vuelvo al mismo registro el DateTimePicker es igual a 28/07/2008 cuando tiene que tener la fecha de 04/07/2008, puede decirme que esta pasando.

Me pregunto que hace tu código cuando muestras el registro, como estás asignando el DateTimePicker, yo creo que ahí está el problema.

Salud OS

Caro 04-08-2008 14:26:38

Hola esimon, tu codigo de inserción esta bien como te dice Marcelo, revisa si en la Base de Datos se esta registrando bien, porque parece que tu problema esta al recuperar nuevamente ese dato en tu DateTimePicker, como lo estas recuperando?.

Saluditos

esimon 05-08-2008 16:30:39

gracias nuevamente, disculpen el retraso de mi repuesta pero estuve guscando y verificando doto para ver si encontraba el problema, Delphius yo estoy usando los mismos componentes que usate como prueba, ahora bien ese codigo lo estoy usando en el Evento OnExit del edit del campo dia y es donde tengo el pequeño problema.

Le puese comentario el que esta en el OnExit y lo coloque en el OnChange y hay funciona bien de bien, pero como mi tabla tiene mucho registros y tengo que modificar coda registro en el primier registro no tengo problema cuando voy a pasar al proximo registro da este mensaje.

Código:

Is not a valid integer value

enecumene 05-08-2008 16:50:33

Cita:

Empezado por esimon (Mensaje 305783)
Código:

Is not a valid integer value

Hola, el mensaje lo dice todo, tal vez el dato insertado no es un valor entero o tenga un punto decimal o un espacio, verfica bien los datos que colocas.

Saludos.

Delphius 05-08-2008 16:50:50

Hola esimon, me gustaría saber ayudarte pero sin conocer mejor como estás haciendo las asignaciones al momento de mostrar los valores no sabré como ayudarte. Tu duda inicial pasaba por una inserción o alta... ahora al parecer se trata de una operación de lectura, y me parece que es allí donde está el problema...

Te habíamos pedido que nos hicieras llegar más detalles te la situación. Me gustaría que nos hicieras llegar el código para saber donde tienes problemas. De otro modo seguiremos estando a las adivinanzas.:(

Saludos,


La franja horaria es GMT +2. Ahora son las 08:35:29.

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