Hace 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!
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