Pregunta: | 36997 - COMO RESTAR DOS FECHAS |
Autor: | Jose Vicente Petro Ortega |
Bueno mi pregunta es como puedo saber cuantos meses y dias hay entre dos dos fechas claro esta siendo una anterior a la otra como por ejemplo : 12/12/01 y 30/05/02 Aqui hay 5 meses y 18 dias.
grasias por la atencion prestada espero me puedan ayudar. |
Respuesta: | areds areds |
no sean brutos!!!!!
Es tan simple como: select (fec_inicio - fec_final) /30 from tabla |
Respuesta: | XANCOPINCA CANCOPINCA |
yo lo hice para oracle
/**************************años**********************/ SELECT TRUNC((FEC_FIN-FEC_INICIO)/365) AÑOS FROM M4T_PERIODOS_COTIZADOS WHERE ID_EMPLEADO='1'; /*************************MESES***********************/ SELECT TRUNC((MOD((FEC_FIN-FEC_INICIO),365)/365)*12) MESES FROM M4T_PERIODOS_COTIZADOS WHERE ID_EMPLEADO='3513'; /*************************DIAS********************************/ SELECT TRUNC(MOD(((MOD((FEC_FIN-FEC_INICIO),365)/365)*12),1)*30) DIAS FROM M4T_PERIODOS_COTIZADOS WHERE ID_EMPLEADO='1'; /************SI DIAS EJEMPLO= 12.68 PONDRIA 13 OK?********************/ SELECT ROUND((MOD(((MOD(((FEC_FIN-FEC_INICIO)/365),1))*12),1)*30)) A FROM M4T_PERIODOS_COTIZADOS WHERE ID_EMPLEADO=1; |
Respuesta: | Luis Felipe García Gutiérrez |
pues bien yo me vi enfrentado al mismo problema y la solución que le hallé al problema fue esta:
procedure TFrmPpal.MENaceChange(Sender: TObject);var a,an,ah,m,mn,mh,d,dn,dh:integer; hoy:string; begin hoy:=copy((DatetoStr(Now)),1,10); if (StrtoDate(MENace.text)<(StrtoDate(hoy))) then begin ah:=StrtoInt(copy(hoy,7,4)); mh:=StrtoInt(copy(hoy,4,2)); dh:=StrtoInt(copy(hoy,1,2)); an:=StrtoInt(copy(MENace.text,7,4)); mn:=StrtoInt(copy(MENace.text,4,2)); dn:=StrtoInt(copy(MENace.text,1,2)); a:=ah-an; if mh<mn then begin a:=a-1; m:=12-mn+mh; end else m:=mh-mn; if dh<dn then begin if m>0 then m:=m-1 else begin a:=a-1; m:=11; end; d:=30-dn+dh; end else d:=dh-dn; messagedlg('Edad actual: '+InttoStr(a)+' años, '+InttoStr(m)+' meses y '+InttoStr(d)+' días.',mtInformation,[mbOK],0) end; end; espero sea útil... |
Respuesta: | Jose Vicente Petro Ortega |
Despues de haver formulado esta pregunta trate de encontrarle una solucion al problema y creo que por medio de las siguientes funciones y el procedimiento que muestro a continuacion y que diseñe yo mismo se puede resolver el interrogante : Function NumeroDias(ParamDia : String): String; Var NumDiaAux1 : String; I : Integer; Begin I := 1; NumDiaAux1 := ''; While ParamDia[I] <> '/' Do Begin NumDiaAux1 := NumDiaAux1 + ParamDia[I]; Inc(I) End; NumeroDias := NumDiaAux1 End; Function NumeroMes(ParamMes : String): String; Var NumMesAux1 : String; I : Integer; Begin I := 1; While ParamMes[I] <> '/' Do Inc(I); Inc(I); NumMesAux1 := ''; While ParamMes[I] <> '/' Do Begin NumMesAux1 := NumMesAux1 + ParamMes[I]; Inc(I) End; NumeroMes := NumMesAux1 End; Procedure RestaMeses(Mes1,Mes2 : TDateTime; Var Mes : Integer); Var MesAux1,MesAux2, Fecha1,Fecha2 : String; NMes1,NMes2, NDia1,NDia2, Meses,Dias : Integer; Begin MesAux1 := DateToStr(Mes1); MesAux2 := DateToStr(Mes2); Fecha1 := MesAux1[Length(MesAux1)-1]+ MesAux1[Length(MesAux1)]; Fecha2 := MesAux2[Length(MesAux2)-1]+ MesAux2[Length(MesAux2)]; NMes1 := StrToInt(NumeroMes(MesAux1)); NMes2 := StrToInt(NumeroMes(MesAux2)); NDia1 := StrToInt(NumeroDias(MesAux1)); NDia2 := StrToInt(NumeroDias(MesAux2)); If Fecha1 = Fecha2 Then Begin Dias := NDia2 - NDia1; Meses := NMes2 - Nmes1; If Dias <= 0 Then Begin Mes := Meses End Else Begin Mes := Meses + 1 End End Else Begin Meses := (12 - Nmes1) + NMes2; If NDia2 > NDia1 Then Begin Mes := Meses + 1 End Else Begin Mes := Meses End End End; Si alguien tiene alguna duda o no cree que esto funcione por favor escribanme. |
Respuesta: | Armando Montoya |
hola, saludos desde irapuato, gto. mexico
puedes solucionar tu problema haciendo unas cuantas operaciones de suma y resta con variables obtenidas con la función DecodeDate, que te descompone una fecha en 3 variables: Año Mes y Dia, puedes descomponer ambas fechas y restar esas variables DecodeDate(Fecha_A_Descomponer, vAno, vMes, vDia); ej. 1 var Ano1,Mes1,Dia1,Ano2,Mes2,Dia2:Word; Begin DecodeDate(DateTimePicker1.DateTime,Ano1,Mes1,Dia1); DecodeDate(DateTimePicker2.DateTime,Ano2,Mes2,Dia2); .... ej. 2 var Ano,Mes,Dia:Word; Begin DecodeDate(Date(),Ano,Mes,Dia); .... Si tienes dudas comentamelo, suerte... |