FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
de nuevo con las horas
Hola al foro.
Mirar, de vuelta con las horas: Tengo un tope de horas concretamente 64 y tengo la necesidad de restarle horas y minutos. ejemplo: si le resto a 64 horas 0:15 = 63:45 ¿ sabeis como seria la formula ? Gracias anticipadas. YOLANDAM Última edición por YolandaM fecha: 10-11-2003 a las 19:44:13. |
#2
|
|||
|
|||
Mira, pasas todo lo que vas a restar a minutos, lo restas y luego el resultado que es en minutos lo pasas a horas, echale cabeza asi, creo que te pueda funcionar o si no me escribes si tienes algun problema.
__________________
Siempre hay un primer momento para todo. |
#3
|
|||
|
|||
Gracias en molestarte en contestar.
|
#4
|
|||
|
|||
nada:
sigo sin saber como hacer la formula. |
#5
|
|||
|
|||
tengo el siguiente codigo y lo hace bien.
implementation var totalh,totalm:double; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var Hour, Min, Sec, MSec: Word; begin totalh:=totalh+SpinEdit1.Value/24; totalm:=totalm+SpinEdit2.Value/1440; DecodeTime(totalh+totalm, Hour, Min, Sec, MSec); edit1.Text:=IntToStr(hour+trunc(totalh+totalm)*24)+':'+IntToStr(min); end; initialization totalh:=0; totalm:=0; end. ------------------------------------------------------ hasta aqui todo bien... ahora tengo un tope de horas ( concretamete 64) en la cual tengo que restarle el contenido de edit1.text por ejemplo, si en el contenido de edit1.text es 0:15 en otro text tendria qie poner 53:45, ¿ como se restaria esto y presentaria en otro control text ? Saludos al foro. |
#6
|
|||
|
|||
una ayuda por favor¡¡¡
tengo el siguiente codigo y lo hace bien.
implementation var totalh,totalm:double; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var Hour, Min, Sec, MSec: Word; begin totalh:=totalh+SpinEdit1.Value/24; totalm:=totalm+SpinEdit2.Value/1440; DecodeTime(totalh+totalm, Hour, Min, Sec, MSec); edit1.Text:=IntToStr(hour+trunc(totalh+totalm)*24)+':'+IntToStr(min); end; initialization totalh:=0; totalm:=0; end. ------------------------------------------------------ hasta aqui todo bien... ahora tengo un tope de horas ( concretamete 64) en la cual tengo que restarle el contenido de edit1.text por ejemplo, si en el contenido de edit1.text es 0:15 en otro text tendria qie poner 53:45, ¿ como se restaria esto y presentaria en otro control text ? Saludos al foro. |
#7
|
||||
|
||||
Este último mensaje, se había publicado como un nuevo hilo siendo continuación del ya abierto sobre el tema de Suma de horas, por lo que ha sido anexado.
Cuando se abre un hilo para un tema concreto, se debe de seguir siempre en el mismo hasta que se de por terminado el tema, si la persona que pregunta, necesita que se le amplie la información debe de seguir añadiendo mensajes al mismo y hilo y no abrir un nuevo. En cuanto a la posible solución hay varias y ya se ha apuntado una de ellas, pasar todo a minutos por ejemplo hacer las operaciones y luego reconvertirlo a horas minutos, segundos. Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#8
|
|||
|
|||
Hola, nuevamente mira estudia y aplica este codigo, me funciona.
procedure TFctrltpo.DifTpoCtr(HorIni1, HorFin1 : String); var HoraInicial, HoraFinal : TDateTime; HorIni, MinIni, HorFin, MinFin, Sec, MSec, MinAuxRes : Word; Lsw, HorIniAux, HorFinAux : string; Li : byte; begin LSumMin := 0; HorIniAux := HorIni1; HorFinAux := HorFin1; if (HorIniAux <> '') and (HorFinAux <> '') then begin HoraInicial := StrToTime(HorIniAux); DecodeTime(HoraInicial, HorIni, MinIni, Sec, MSec); HoraFinal := StrToTime(HorFinAux); DecodeTime(HoraFinal, HorFin, MinFin, Sec, MSec); if (HoraFinal > HoraInicial ) then // Hora de entrada (inicial) es menor que // // la hora de salida (final), lo mas segu-// // ro es que el usuario digito la hora de // // salida bajo el horario de 12 horas // begin Lsw := 'Incorrecto'; MinAuxRes := 0; if (HorIni = HorFin) then begin MinRes := MinFin - MinIni; end else begin MinRes := 60 - MinIni; HorIni := HorIni + 1; while (Lsw <> 'Correcto') do begin MinAuxRes := MinAuxRes + 1; if (HorIni = HorFin) then begin MinRes := MinRes + MinFin; Lsw := 'Correcto'; end; if (MinAuxRes = 60) then begin MinRes := MinRes + MinAuxRes; MinAuxRes := 0; HorIni := HorIni + 1; end; end; end; LSumMin := LSumMin + MinRes; MinAuxRes := 0; HorIniAux := ''; HorFinAux := ''; Lsw := 'Incorrecto'; MinRes := 0; LSumHor := 0; while Lsw <> 'Correcto' do begin LSumHor := LSumHor + 1; MinRes := MinRes + 60; if (MinRes > LsumMin) then begin MinRes := MinRes - 60; LSumHor := LSumHor - 1; Lsw := 'Correcto'; end else begin if (MinRes = LsumMin) then Lsw := 'Correcto'; end; end; end else begin Gcoderror := 1; // Es mayor la hora final que hora de entrada // // Siempre y cuando sea horario de 12 horas // end; Label12.Caption := IntToStr(LSumHor) + ',' + IntToStr(LSumMin - MinRes) + ' Min. /' + end; end; end; Me dices como te fue, por este mismo hilo. chauuuuuuuuuuu
__________________
Siempre hay un primer momento para todo. |
#9
|
|||
|
|||
hOLA CFP86, QUE TAL?
Mira, te digo dónde me da error OK? procedure TFctrltpo.DifTpoCtr(HorIni1, HorFin1 : String); --- ERROR var HoraInicial, HoraFinal : TDateTime; HorIni, MinIni, HorFin, MinFin, Sec, MSec, MinAuxRes : Word; Lsw, HorIniAux, HorFinAux : string; Li : byte; begin LSumMin := 0; ------------ERROR HorIniAux := HorIni1; HorFinAux := HorFin1; if (HorIniAux <> '') and (HorFinAux <> '') then begin HoraInicial := StrToTime(HorIniAux); DecodeTime(HoraInicial, HorIni, MinIni, Sec, MSec); HoraFinal := StrToTime(HorFinAux); DecodeTime(HoraFinal, HorFin, MinFin, Sec, MSec); if (HoraFinal > HoraInicial ) then // Hora de entrada (inicial) es menor que // // la hora de salida (final), lo mas segu-// // ro es que el usuario digito la hora de // // salida bajo el horario de 12 horas // begin Lsw := 'Incorrecto'; MinAuxRes := 0; if (HorIni = HorFin) then begin MinRes := MinFin - MinIni; end else begin MinRes := 60 - MinIni; HorIni := HorIni + 1; while (Lsw <> 'Correcto') do begin MinAuxRes := MinAuxRes + 1; if (HorIni = HorFin) then begin MinRes := MinRes + MinFin; Lsw := 'Correcto'; end; if (MinAuxRes = 60) then begin MinRes := MinRes + MinAuxRes; MinAuxRes := 0; HorIni := HorIni + 1; end; end; end; LSumMin := LSumMin + MinRes; MinAuxRes := 0; HorIniAux := ''; HorFinAux := ''; Lsw := 'Incorrecto'; MinRes := 0; LSumHor := 0; while Lsw <> 'Correcto' do begin LSumHor := LSumHor + 1; MinRes := MinRes + 60; if (MinRes > LsumMin) then begin MinRes := MinRes - 60; LSumHor := LSumHor - 1; Lsw := 'Correcto'; end else begin if (MinRes = LsumMin) then Lsw := 'Correcto'; end; end; end else begin Gcoderror := 1; // Es mayor la hora final que hora de entrada // // Siempre y cuando sea horario de 12 horas // end; Label12.Caption := IntToStr(LSumHor) + ',' + IntToStr(LSumMin - MinRes) + ' Min. /' + end; end; end; |
#10
|
|||
|
|||
hola otra vez CFPA86.
Mira este código me funciona bien. //------------------------------------------------------------------// unit sumahoras; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, Mask, RzEdit, RzSpnEdt,dateutils; type TForm3 = class(TForm) edit1: TRzSpinEdit; edit2: TRzSpinEdit; sumar: TBitBtn; restar: TBitBtn; Label3: TLabel; Label4: TLabel; Edit3: TEdit; BitBtn1: TBitBtn; Edit4: TEdit; Label1: TLabel; Label2: TLabel; procedure BitBtn1Click(Sender: TObject); procedure sumarClick(Sender: TObject); procedure restarClick(Sender: TObject); procedure FormActivate(Sender: TObject); procedure Edit4Change(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form3: TForm3; implementation var totalh,TotalM,total,resta,totalm2: Ttime; {$R *.dfm} procedure TForm3.BitBtn1Click(Sender: TObject); begin close; end; procedure TForm3.sumarClick(Sender: TObject); var Hour, Min, Sec, MSec: Word; var hour2, min2,sec2,msec2: word; begin { ---------------------------------------------------------------------} Totalh:=totalh+Edit1.Value/24 ; Totalm:=totalm+Edit2.Value/1440 ; { --------------------------------------} total:=total + edit1.Value/24; totalm2:=totalm2 + edit2.Value/1440; decodetime(resta - total-totalm2, hour2,min2,sec2,msec2); edit4.Text:=inttostr(hour2 + trunc(resta - total )* 24 ) +':'+IntToStr(min2); { -----------------------------------------} DecodeTime(totalh+totalm, Hour, Min, Sec, MSec); Edit3.Text:=IntToStr(hour + trunc(totalh+totalm) * 24) +':'+IntToStr(min); Edit1.Value:=0; Edit2.Value:=0; { -------------------------------------------------------------------} end; procedure TForm3.restarClick(Sender: TObject); var Hour, Min, Sec, MSec: Word; var hour2, min2,sec2,msec2: word; begin totalh:=totalh-Edit1.Value/24; totalm:=totalm-Edit2.Value/1440; total:=total - edit1.Value/24; totalm2:=totalm2 -edit2.Value/1440; decodetime(resta - total-totalm2, hour2,min2,sec2,msec2); edit4.Text:=inttostr(hour2 + trunc(resta - total )* 24 ) +':'+IntToStr(min2) ; DecodeTime(totalh+totalm, Hour, Min, Sec, MSec); edit3.Text:=IntToStr(hour+trunc(totalh+totalm)*24)+':'+IntToStr(min); edit1.Value:=0; edit2.Value:=0; End; procedure TForm3.FormActivate(Sender: TObject); begin edit4.Text:=''; EDIT3.Text:=''; totalh:= 0; totalm:= 0; resta:= 64 / 24; total:=0; totalm2:=0; end; procedure TForm3.Edit4Change(Sender: TObject); begin if edit4.Text= '64:0' then restar.Enabled:=false else restar.enabled:=true; if edit4.Text='0:0' then sumar.Enabled:=false else sumar.enabled:=true; end; initialization totalh:= 0; totalm:= 0; resta:= 64 / 24; end. Gracias a tu interes y al foro en general. YOLANDAM |
#11
|
|||
|
|||
Bueno, la respuesta a esto está en una seria de Units que encontré en Internet, donde suma Horas, minutos, meses, de todo, voy a tratar de colocarla en un site en miarroba.com, si es que alguien la solicita, pues llegue tarde a la pregunta y vi que habian muchas ideas.
Estas units lo que tienen son procedimientos y funciones al cual uno le pasa parametros y zasssssss!!!!!, Eureca!"!"""""" |
|
|
|