FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Calculo de Años
Necesito calcular los anos transcurridos entre el año de compra de una producto el cual lo introdusco a una tabla mediante un dbedit, y la fecha actual que posee la computador.
Ejemplo: AÑo de compra: 1999 Año actual : 2004 Resultado: 5 Precisaria que si se puede me pasen todo el codigo completo del calculo. Desde ya muchas gracias. Aclaración: trabajo en Delphi 5 entreprice y con tablas paradox 7
__________________
Cita:
|
#2
|
|||
|
|||
Me suena que hay una función, pero como no tengo el Delphi delante....
Código:
var D, M, AIni, AFin : Word; begin DecodeDate(AFin, M, D, Date); DecodeDate(AIni, M, D, TablaCampoFecha.AsDateTime); ShowMessage('Diferencia de años : ' + IntToStr(AFin - AIni)); end; Cita:
Última edición por __cadetill fecha: 20-02-2004 a las 14:30:01. |
#3
|
|||
|
|||
Calculo de anio
CADETILL UTILICE EL SIGUIENTE CODIGO :
procedure TModeloDatos.TblMuebleCalcFields(DataSet: TDataSet); Var D, M, AIni, AFin : Word; Begin DecodeDate(AFin, M, D, Date); AIni:=ModeloDatos.TblMueble.FieldValues['Añocompra']; ShowMessage('Diferencia de años : ' + IntToStr(AFin - AIni)); end; PARA CALCULAR LOS ANOS TRANSCURRIDOS ENTRE EL AÑO DE COMPRA DE UN PRODUCTO Y EL ACTUAL Y ME DA EL SIGUIENTE ERROR: [Error] ModDat.pas(104): Types of actual and formal var parameters must be identical [Fatal Error] CStock.dpr(15): Could not compile used unit 'ModDat.pas' Y NO SE COMO ARREGLARLO Saludos, jrcosta75
__________________
Cita:
|
#4
|
||||
|
||||
Código:
procedure TForm1.Button1Click(Sender: TObject); function Edad(FechaNacimiento:string):integer; var iTemp,iTemp2,Nada:word; Fecha:TDate; begin Fecha:=StrToDate(FechaNacimiento); DecodeDate(Date,itemp,Nada,Nada); DecodeDate(Fecha,itemp2,Nada,Nada); if FormatDateTime('mmdd',Date) < FormatDateTime('mmdd',Fecha) then Result:=iTemp-iTemp2-1 else Result:=iTemp-iTemp2; end; begin Label1.Caption:=intToStr(Edad('07/09/1969')); end;
__________________
:) |
#5
|
|||
|
|||
se supone que
Código:
ModeloDatos.TblMueble.FieldValues['Añocompra'] Pues entonces has de hacer lo que te proponia en el mensaje anterior Código:
var D, M, AIni, AFin : Word; begin DecodeDate(AFin, M, D, Date); DecodeDate(AIni, M, D, ModeloDatos.TblMueble.FieldValues['Añocompra']); ShowMessage('Diferencia de años : ' + IntToStr(AFin - AIni)); end; |
#6
|
|||
|
|||
pregunta
que ocurre si compro algo el 31/12/03 y lo vendo el 01/01/04. ?
que resultado debe dar? deberia dar 0 años. no? creo que no habria querestar solo los años, sino tener en cuenta toda la fecha.
__________________
frenadol |
#7
|
||||
|
||||
manrueda... yo intento poner mi granito de arena conforme a mis conocimientos (o capacidad de búsqueda de información), es verdad lo que dices, debería de dar la fecha completa, el caso es que no se :d
__________________
:) |
#8
|
||||
|
||||
Código:
function Edad(FecNac, FecAct: tDateTime): Integer; var nAnoAct, nMesAct, nDiaAct: word; nAnoNac, nMesNac, nDiaNac: word; Edad: Integer; begin //Calcula la edad en años //Desglosa la Fecha DecodeDate(FecNac, nAnoNac, nMesNac, nDiaNac); DecodeDate(FecAct, nAnoAct, nMesAct, nDiaAct); //Verifica una fecha if FecNac = 0 then begin Result := 0; Exit; end; //Edad en años Edad := nAnoAct - nAnoNac; //Calculo del mes if nMesAct = nMesNac then begin //Para el Dia if nDiaAct < nDiaNac then Edad := Edad - 1; end else if nMesAct < nMesNac then Edad := Edad - 1; //Devuelve el valor Result := Edad; end; FecNac: Fecha de Nacimiento FecAct: Fecha Actual o fecha a la cual se quiere calcular la edad Cualquier duda pregunten, esta funcion esta 100% operativa
__________________
...Yo naci en esta ribera del arauca vibr@d0r Soy hermano de la espuma, de la garza, de la rosa y del sol... Viva Venezuela |
#9
|
|||
|
|||
sin animo de ofender
darkbyte, no tenia intencion de infravalorar tus conocimientos . Seguro que son superiores a los mios. solamente que anoche viendo esta pregunta se me ocurrio que podria tener esa pega. Que ademas es muy comun , no solo en programacion sino en cualquier ambito de la vida, cuando calculamos el tiempo transcurrido entre dos fechas. Solo di mi punto de vista. Espero no ofender a nadie. Aqui estamos para aprender y compartir conocimientos, ya que 4 ojos ven mas que 2. Son muchas las veces que alguien de este foro me ha ayudado con algun problema, o me ha aclarado alguno duda. un saludo.
__________________
frenadol |
#10
|
||||
|
||||
Me alegro de la aclaración hecha pues DarkByte es un asiduo coloborador del Club, por otra parte añadir que si restamos 2 fechas es decir dos variables del tipo Tdate, obtenemos días:
Código:
procedure TForm1.Button1Click(Sender: TObject); var dIni,dFin:Tdate; nDias:Double; begin dIni:=Date - 10; dFin:=Date; nDias:=dFin - dIni; ShowMessage(FormatFloat(',0.0000',n)); end; Lo que propongo como solución sería restar los 2 fechas y dividirlas entre 365 si es que es posible es decir si el resultante fuera > 365 Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#11
|
|||
|
|||
Hola a todos, en este caso yo propondría utilizar una de las funciones que tenemos en los utilitarios de fechas (unit DateUtils), de forma general podemos usar el siguiente código:
Código:
procedure TForm1.Button1Click(Sender: TObject); begin Label1.Caption:='Han transcurrido '+FloatToStr(YearSpan(date,ModeloDatos.TblMueble.FieldByName('Añocompra').AsDateTime)+ 'años'; end; Esta función devuelve los años con fracciones y solventa el caso de periodos menores de uno vale para el asunto señalado por Marcos para amortizaciones. Si se trabaja con otras funciones de este grupo se pudiera llegar a mostrar los años, meses y días transcurridos quedando mas elegante la presentación. Saludos |
#12
|
|||||
|
|||||
Cita:
Cita:
Cita:
Cita:
Cita:
__________________
:) |
#13
|
|||
|
|||
Aqui encontrarás unas Units que son una maravilla
|
#14
|
|||
|
|||
Ayudaaaaa.
Probe de todas formas para calcular los anos transcurridos y no hay forma me da error
PUSE: procedure TForm10.BitBtn1Click(Sender: TObject); Var d,m,Aini,Afin:Word; begin Decodedate(Date,Afin,m,d,); Decodedate(ModeloDatos.TblMueble.FieldValues['Fechcomp'],Aini,m,d,); ShowMessage('Diferencia de años:'+IntToStr(Afin-Aini)); end; Y ME DIO EL SIGUIENTE ERROR [Error] Unit10.pas(105): Too many actual parameters [Error] Unit10.pas(106): Too many actual parameters [Fatal Error] CStock.dpr(15): Could not compile used unit 'Unit10.pas' TAMBIEN PUSE: procedure TForm10.BitBtn1Click(Sender: TObject); Var d,m,Aini,Afin:Word; begin Decodedate(Afin,m,d,Date); Decodedate(Aini,m,d,ModeloDatos.TblMueble.FieldValues['Fechcomp']); ShowMessage('Diferencia de años:'+IntToStr(Afin-Aini)); end; Y ME DIO EL SIGUIENTE ERROR [Error] Unit10.pas(105): Types of actual and formal var parameters must be identical [Error] Unit10.pas(106): Types of actual and formal var parameters must be identical [Fatal Error] CStock.dpr(15): Could not compile used unit 'Unit10.pas' NO SE COMO HACERLO NECESITO AYUDA GRACIAS.
__________________
Cita:
|
#15
|
||||
|
||||
Con solo darle a F1 verás que la sintaxis correcta es la primera. Para que te funcione, prueba a no poner paréntesis de más.
Código:
procedure TForm10.BitBtn1Click(Sender: TObject); Var d,m,Aini,Afin:Word; begin Decodedate(Date,Afin,m,d); Decodedate(ModeloDatos.TblMueble.FieldValues['Fechcomp'],Aini,m,d); ShowMessage('Diferencia de años:'+IntToStr(Afin-Aini)); end;
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#16
|
||||
|
||||
Código:
procedure TForm10.BitBtn1Click(Sender: TObject); Var d,m,Aini,Afin:Word; begin Decodedate(Date,Afin,m,d,);//La coma sobra Decodedate(ModeloDatos.TblMueble.FieldValues['Fechcomp'],Aini,m,d,); ShowMessage('Diferencia de años:'+IntToStr(Afin-Aini)); end;
__________________
Guía de Estilo de los Foros Cita:
Última edición por marcoszorrilla fecha: 24-02-2004 a las 22:16:59. |
#17
|
||||
|
||||
donde dije paréntesis de más, digo diego, digo quise decir comas de más.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#18
|
||||
|
||||
Escribimos casi al mismo tiempo Marc, cuando he enviado mi mensaje aún no estaba el tuyo.
Donde dije Diego no digo nada. Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
|
|
|