Truco: Restar fechas en Xojo

calendariosHace unos días recibí una consulta por parte de un usuario de Xojo que utilizaba anteriormente VisualBasic. La cuestión era sobre cómo podía restar fechas en Xojo para obtener un resultado, y para lo cual disponía de una función en VisualBasic. La respuesta, realmente sencilla especialmente cuando utilizamos las clases Date y DateInterval del nuevo Framework de Xojo.

Para hallar la diferencia sólo tendremos que utilizar el operador de sustracción entre dos variables de tipo Xojo.Core.Date. El resultado obtenido como parte de dicha operación será un nuevo valor de tipo DateInterval en el que encontraremos la diferencia (que puede ser positiva o negativa), expresada como la cantidad de años, meses y días transcurridos entre ambas fechas. A partir de ahí, podríamos generar una nueva variable de tipo Xojo.Core.Date o bien dejar que la lógica de nuestra aplicación trabaje desde ese punto en base al DateInterval obtenido.

Por ejemplo, la ejecución del siguiente código:

Using Xojo.Core
Dim dateA As date = New Date(2017,10,23, TimeZone.current)
Dim dateB As date = New Date(2017,11,23, TimeZone.Current)
Dim result As DateInterval = dateB - dateA
MsgBox result.Years.ToText+ " " + result.Months.ToText + " " + result.Days.ToText

Nos proporcionará un DateInterval de cero años, un mes y cero días. Mientras que si intercambiamos la posición de los operandos, entonces el signo del resultado cambia para mostrar que el DateInterval apunta a un mes de diferencia en el pasado:

Using Xojo.Core
Dim dateA As date = New Date(2017,10,23, TimeZone.current)
Dim dateB As date = New Date(2017,11,23, TimeZone.Current)
Dim result As DateInterval = dateA - dateB
MsgBox result.Years.ToText+ " " + result.Months.ToText + " " + result.Days.ToText

El resultado en esta ocasión será cero años, -1 mes y cero días.

Como puedes ver, ¡realmente sencillo de trabajar con fechas y diferencias entre fechas en Xojo!

Un comentario en “Truco: Restar fechas en Xojo

  1. mauricio tanco

    Muchas gracias Javier, en base a tu respuesta pude convertir una función que tenia en el VB6, lo que hace es tomar Horas de Diferencias (para calculo de Hs trabajadas) cuando la fecha final es menor que la inicial, para eso se aumenta la fecha hipotética del día + 1.

    Method Name: Horas_DiferenciaHHMM
    Parameters: dblHoraIni as Double, dblHoraFin as Double
    Return Type: String
    Code:
    Dim strRetornar As String
    Dim dteFechaINI As new Date(1980,01,01)
    Dim dteFechaFIN As new Date(1980,01,01)
    Dim dteFechaRes As new date
    Dim strHM, strH, strM as String

    strHM = format(dblHoraIni,”00:00″)
    strH = Left(strhm,2)
    strM = right(strhm,2)
    dteFechaINI.Hour = strH.Val
    dteFechaINI.Minute = strM.Val

    strHM = format(dblHoraFin,”00:00″)
    strH = Left(strhm,2)
    strM = right(strhm,2)
    dteFechaFIN.Hour = strH.Val
    dteFechaFIN.Minute = strM.Val

    ‘ si la hora final es menor a la hora inicio, la aumenta 1 dÌa
    If dblHoraFin < dblHoraIni Then
    dteFechaFIN.Day = dteFechaFIN.Day + 1
    end if
    ' calcular
    Dim resultado as double = dteFechaFIN.TotalSeconds – dteFechaINI.TotalSeconds
    dteFechaRes.TotalSeconds = resultado
    '
    strRetornar = dteFechaRes.Hour.totext + ":" + format(dteFechaRes.Minute,"00")
    '
    return strRetornar

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *