Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-02-2012
ZiriusB ZiriusB is offline
Miembro
 
Registrado: oct 2010
Posts: 86
Poder: 16
ZiriusB Va por buen camino
Question Restar un dia a Datetimepicker sin contar fines de semana

Buenas amigos, tengo el siguiente problema...

Necesito que en un Datatimepicker se muestre el dia anterior al actual,


Código Delphi [-]
procedure TForm7.FormActivate(Sender: TObject);
Var
midate:TDate;
begin
midate:=now-1;
HFecha.DateTime:= midate;
end;

Hfecha es el Datetimepicker, todo bien, me coloca el dia anterior pero el problema es que solo quiero que me coloque los dias laborables (Lunes a Viernes) cuando llega el dia del lunes el Datetimepicker me muestra el dia Domingo, pero yo quiero que me muestre el dia Viernes que es el ultimo dia laborable!

¿Tienen alguna sugerencia?, Añado que el control se carga solo, no es un valor tomado de una base de datos ni algo por el estilo!

Saludos
__________________
"Ningun precio es alto por el privilegio de ser uno mismo..."
Responder Con Cita
  #2  
Antiguo 16-02-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 ZiriusB.

Según entiendo el problema lo vas a tener los días lunes y domingo, en el primer caso tenes que restar 3 a la fecha y en el segundo 2 ya que en ambos el último día laboral anterior es viernes, en los casos restantes restar 1:
Código Delphi [-]
...
implementation 

uses DateUtils;

function LaboralAnterior(ADate: TDate): TDate;
begin
  case DayOfTheWeek(ADate) of
    DayMonday: ADate:= ADate-3;
    DaySunday: ADate:= ADate-2;
    else
     ADate:= ADate-1;
  end;
  Result:= ADate;
end;

Ejemplo de llamada:
Código Delphi [-]
begin
  DateTimePicker1.Date:= LaboralAnterior(StrToDate('20/02/2012'));
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 16-02-2012
ZiriusB ZiriusB is offline
Miembro
 
Registrado: oct 2010
Posts: 86
Poder: 16
ZiriusB Va por buen camino
Wink

La verdad solo serian los Lunes, porque cuando llegue el dia Lunes el Datetimepicker me colocaria el dia anterior osea DOMINGO, ya de ahi no tendria problema!

Probare esto, gracias amigo
__________________
"Ningun precio es alto por el privilegio de ser uno mismo..."
Responder Con Cita
  #4  
Antiguo 16-02-2012
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 21
Chris Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Según entiendo el problema lo vas a tener los días lunes y domingo
Te has comido el sábado amigo :P

Esta es mi alternativa:
Código Delphi [-]
function LaboralAnterior(ADate: TDate): TDate;
begin
    Result := IncDay(ADate, -1);
    
    case DayOfTheWeek(Result) of
        DaySunday  : Result := IncDay(Result, -2);
        DaySaturday: Result := IncDay(Result, -1);
    end;
end;

Saludos!
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web

Última edición por Chris fecha: 16-02-2012 a las 17:16:20.
Responder Con Cita
  #5  
Antiguo 16-02-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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
Cita:
Empezado por Chris Ver Mensaje
Te has comido el sábado amigo :P
Cierto, debe ser por que odio madrugar el sabado...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 16-02-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Chris, ecfisa sus códigos se pueden mejorar.
Dentro del case simplemente establezco los días a restar, y directamente hago la operación afuera. Después de todo es una expresión común a todos los casos y puede estar fuera del case. Es como sacar factor común en una expresión matemática

Código Delphi [-]
case  DayOfTheWeek(ADate) of
DayMonday: Dec := -3;
DaySunday: Dec := -2;
..
end; // fin case
result := IncDay(Date, Dec);

A mi parecer es un código más legible.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #7  
Antiguo 16-02-2012
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama


Código Delphi [-]
case  DayOfTheWeek(ADate) of
DayMonday: Decremento := -3;
DaySunday: Decremento := -2;
..
end; // fin case
result := IncDay(Date, Decremento);

Saludos
Responder Con Cita
Respuesta



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
La semana del DBA roman Noticias 5 18-02-2010 19:49:33
restar/sumar 3 meses a un datetimepicker Milperrimo Varios 3 17-11-2007 00:50:16
Dia de la semana lokodelphi Varios 5 18-05-2006 22:46:32
La semana del Cu... jhonny Humor 0 23-12-2003 17:55:53
Contar dias de la semana entre fechas lolobs Varios 1 04-09-2003 16:11:24


La franja horaria es GMT +2. Ahora son las 15:04:27.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi