PDA

Ver la Versión Completa : Suma de horas II


YolandaM
10-11-2003, 17:14:20
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

CFPA86
10-11-2003, 21:53:20
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.

YolandaM
10-11-2003, 21:58:11
Gracias en molestarte en contestar.

YolandaM
11-11-2003, 11:03:26
nada:

sigo sin saber como hacer la formula.

YolandaM
11-11-2003, 12:37:48
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.

YolandaM
11-11-2003, 20:22:15
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.

marcoszorrilla
12-11-2003, 07:59:12
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.

CFPA86
12-11-2003, 16:37:11
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

YolandaM
12-11-2003, 19:56:10
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;

YolandaM
12-11-2003, 20:04:27
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

buitrago
19-11-2003, 22:05:39
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!"!""""""