Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Dias entre TimePickers (https://www.clubdelphi.com/foros/showthread.php?t=53111)

jocey 11-02-2008 14:24:55

Dias entre TimePickers
 
Hola amigos, les traigo una nueva pregunta hoy, yo tengo dos Timepickers que los utilizo para calcular la cantidad de dias entre ellos dos, ahora eso esta muy bien, pero quisiera que no se contaran los fines de semana..... como puedo hacer esto, me explico bien?


Saludos a todos
Jocey

ixMike 11-02-2008 14:47:56

Hola.

Bueno, así, de cabeza, podrías hacer lo siguiente:

-El tipo DateTime no es más que un float, la unidad es un día, y los decimales, fracciones de días. Es decir, Dias:=Fecha2-Fecha1; debería funcionar.
-Pero claro, eso no resta los fines de semana, ¿cómo quitarlos? Ajusta primero las dos fechas, para que coincidan las dos con el mismo día de la semana que NO sea sábado o domingo. Es decir, después de hacer la resta, haz que los dos días se conviertan en lunes, o martes, o miércoles... utiliza la función DayOfWeek o DayOfTheWeek.
-Una vez hecho ese ajuste, Dias:=Dias-(Fecha2-Fecha1)*2/7. Esto es, le resta 2/7 partes de días, o lo que es lo mismo, 2 días de cada semana (los findes). Ahora Fecha1 y Fecha2 son las fechas ya ajustadas.


Espero que te sirva.


Salu2 ;)

jocey 11-02-2008 16:51:59

Gracias
 
IxMike muchas gracias el ejemplo que me distes esta perfecto, una vez mas gracias... sin ustedes todo seria muy dificil, a veces en cosas sencillas nos trabamos y estan ustedes como dioses....

Gracias de todos corazon

ixMike 11-02-2008 18:16:15

Cita:

Empezado por jocey (Mensaje 264900)
...y estan ustedes como dioses....

¿Sólo como dioses? ¡Somos dioses! y sufrirás la ira divina :D:D:D (o la gracia, según nos trates).

Cita:

Empezado por jocey (Mensaje 264900)
Gracias de todos corazon

De nada, mortal, de nada ;):p


Salu2. :)

egostar 11-02-2008 23:13:54

Cita:

Empezado por ixMike (Mensaje 264873)
......Ajusta primero las dos fechas, para que coincidan las dos con el mismo día de la semana que NO sea sábado o domingo. Es decir, después de hacer la resta, haz que los dos días se conviertan en lunes, o martes, o miércoles... utiliza la función DayOfWeek o DayOfTheWeek.
-Una vez hecho ese ajuste, Dias:=Dias-(Fecha2-Fecha1)*2/7. Esto es, le resta 2/7 partes de días, o lo que es lo mismo, 2 días de cada semana (los findes). Ahora Fecha1 y Fecha2 son las fechas ya ajustadas.

Solo agregando, si no puedes o no quieres ajustar las fechas, puedes hacer esto.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Fecha : TDateTime;
  Dias : integer;
begin
  dias := 0;
  Fecha := DateTimePicker1.Date;
  REPEAT
     if DayofWeek(Fecha) in [2..6] then begin //en mi caso 2 a 6 es Lunes a Viernes, pero podria ser diferente en tu caso
        Memo1.Lines.Add(DatetoStr(Fecha));
        Inc(Dias);
     end;
     Fecha := Fecha+1;
  UNTIL Fecha > DateTimePicker2.Date;
  Memo1.Lines.Add('Total dias : '+FloattoStr(Dias));
end;

Salud OS

Garry 13-02-2008 12:32:43

Puedes simplificar algo, pues si haces...
Cita:

Empezado por ixMike (Mensaje 264873)
... Dias:=Fecha2-Fecha1...

... y...
Cita:

... Dias:=Dias-(Fecha2-Fecha1)*2/7...
Queda más sencillo sacando factor común :)
Código Delphi [-]
Dias:=Dias*5/7
¿no?

Saludos

ixMike 13-02-2008 14:23:28

Cita:

Empezado por Garry (Mensaje 265488)
Puedes simplificar algo, pues si haces...
... y...Queda más sencillo sacando factor común :)Código Delphi [-]Dias:=Dias*5/7

¿no?

Saludos

jeje :D

sí, efectivamente, además de que se optimiza el código ;)

¡qué raro que no se me ocurriera! :o


Salu2.


La franja horaria es GMT +2. Ahora son las 04:58:33.

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