PROCEDURE TiempoTransc
PARAMETERS ldFecha1, ldFecha2
* Recibe como parámetro dos fechas (en formato DateTime, devuelve el tiempo transcurrido en formato: Años, Meses, Semanas, Dias, Horas, Minutos, Segundos.
* ldFecha1 = {23/02/2023 07:55:50 AM}
* ldFecha2 = DATETIME()
IF VARTYPE(ldFecha1) != 'T' OR VARTYPE(ldFecha2) != 'T'
MESSAGEBOX('Los parámetros de ambas fechas deben ser del Tipo DATETIME', 0+16, 'Datos no válidos')
RETURN ''
ENDIF
IF ldFecha1 = ldFecha2
RETURN '0 seg.'
ENDIF
* Inicializar variables:
lcTranscurrido = ''
lnDias = TTOD(ldFecha2) - TTOD(ldFecha1)
lnAños = INT(lnDias / 365.25)
lnDias = lnDias - (lnAños * 365.25)
lnMeses = INT(lnDias / 30)
lnDias = lnDias - (lnMeses * 30)
lnHora1 = HOUR(ldFecha1)
lnMinuto1 = MINUTE(ldFecha1)
lnSegundo1 = SEC(ldFecha1)
lnHora2 = HOUR(ldFecha2)
lnMinuto2 = MINUTE(ldFecha2)
lnSegundo2 = SEC(ldFecha2)
* Obtener diferencia en minutos:
lnEnMinutos = ((lnHora2 * 60) + lnMinuto2) - ((lnHora1 * 60) + lnMinuto1)
lnEnMinutos = ABS(lnEnMinutos)
* Convertir a Horas:
lnHoras = ABS(INT(lnEnMinutos / 60))
* Restar horas para que queden minutos:
lnMinutos = ABS(lnEnMinutos - (lnHoras * 60))
* Diferencia de segundos:
lnSegundos = ABS(lnSegundo2 - lnSegundo1)
* MESSAGEBOX('Variables: ' + CHR(13) + CHR(13) + ;
'Hora1: ' + STR(lnHora1) + CHR(13) + ;
'Hora2: ' + STR(lnHora2) + CHR(13) + ;
'Minuto1: ' + STR(lnMinuto1) + CHR(13) + ;
'Minuto2: ' + STR(lnMinuto2) + CHR(13) + ;
'Horas: ' + STR(lnHoras) + CHR(13) + ;
'Minutos: ' + STR(lnMinutos), 0+64, 'Mensaje')
IF lnAños >= 1
IF lnAños = 1
lcTranscurrido = lcTranscurrido + ALLTRIM(STR(lnAños)) + ' año '
ELSE
lcTranscurrido = lcTranscurrido + ALLTRIM(STR(lnAños)) + ' años '
ENDIF
ENDIF
IF lnMeses >= 1
IF lnMeses = 1
lcTranscurrido = lcTranscurrido + ALLTRIM(STR(lnMeses)) + ' mes '
ELSE
lcTranscurrido = lcTranscurrido + ALLTRIM(STR(lnMeses)) + ' meses '
ENDIF
ENDIF
IF lnDias > 0
IF lnDias >= 7
IF INT(lnDias / 7) = 1
lcTranscurrido = lcTranscurrido + ALLTRIM(STR(INT(lnDias / 7))) + ' semana '
ELSE
lcTranscurrido = lcTranscurrido + ALLTRIM(STR(INT(lnDias / 7))) + ' semanas '
ENDIF
IF MOD(lnDias, 7) = 1
lcTranscurrido = lcTranscurrido + ALLTRIM(STR(MOD(lnDias, 7))) + ' día '
ELSE
lcTranscurrido = lcTranscurrido + ALLTRIM(STR(MOD(lnDias, 7))) + ' días '
ENDIF
ELSE
IF lnDias = 1
lcTranscurrido = lcTranscurrido + ALLTRIM(STR(lnDias)) + ' día '
ELSE
lcTranscurrido = lcTranscurrido + ALLTRIM(STR(lnDias)) + ' días '
ENDIF
ENDIF
ENDIF
IF lnHoras > 0
IF lnHoras = 1
lcTranscurrido = lcTranscurrido + ALLTRIM(STR(lnHoras)) + ' hora '
ELSE
lcTranscurrido = lcTranscurrido + ALLTRIM(STR(lnHoras)) + ' horas '
ENDIF
ENDIF
IF lnMinutos > 0
IF lnMinutos = 1
lcTranscurrido = lcTranscurrido + ALLTRIM(STR(lnMinutos)) + ' minuto '
ELSE
lcTranscurrido = lcTranscurrido + ALLTRIM(STR(lnMinutos)) + ' minutos '
ENDIF
ENDIF
IF lnSegundos > 0
lcTranscurrido = lcTranscurrido + ALLTRIM(STR(lnSegundos)) + ' segundos'
ENDIF
MESSAGEBOX('El tiempo transcurrido entre: ' + CHR(13) + CHR(13) + TTOC(ldFecha1) + ' y ' + TTOC(ldFecha2) + ' es:' + CHR(13) + CHR(13) + ;
lcTranscurrido, 0+64, 'Mensaje')
RETURN lcTranscurrido
ENDPROC