Thought this might be useful to some people to partially emulate some of VBs date functions
#COMPILE EXE
#DIM ALL
#INCLUDE "win32api.inc"
'The following are interval specifications for the DateDiff and DateAdd functions
'Only periods of fixed time are included (so no months or years)
'Although these could be easily calculated by other means
%INT_SECONDS = 10000000
%INT_MINUTES = 600000000
%INT_HOURS = 36000000000
%INT_DAYS = 864000000000
TYPE DateSplit
LowPart AS DWORD
HighPart AS DWORD
END TYPE
UNION DateQuad
U AS DateSplit
QuadPart AS QUAD
END UNION
FUNCTION DateDiff(BYVAL Interval AS QUAD,BYVAL udtSource AS SYSTEMTIME,BYVAL udtDest AS SYSTEMTIME) AS QUAD
LOCAL udtFileSource AS FILETIME,udtFileDest AS FILETIME
LOCAL udtQuadSource AS DateQuad,udtQuadDest AS DateQuad
'convert to filetime
systemtimetofiletime udtSource,udtFileSource
systemtimetofiletime udtDest,udtFileDest
'convert to quad time
udtQuadSource.u.LowPart=udtFileSource.dwLowDateTime
udtQuadSource.u.HighPart=udtFileSource.dwHighDateTime
udtQuadDest.u.LowPart=udtFileDest.dwLowDateTime
udtQuadDest.u.HighPart=udtFileDest.dwHighDateTime
FUNCTION=(udtQuadDest.QuadPart - udtQuadSource.QuadPart)\interval
END FUNCTION
SUB DateAdd(BYVAL Interval AS QUAD,BYVAL udtSource AS SYSTEMTIME,BYVAL Amount AS QUAD,BYREF udtDest AS SYSTEMTIME)
Amount=Amount * Interval
LOCAL udtFileSource AS FILETIME,udtFileDest AS FILETIME
LOCAL udtQuadSource AS DateQuad,udtQuadDest AS DateQuad
'convert source to FileTime
systemtimetofiletime udtSource,udtFileSource
'convert to quad time
udtQuadSource.u.LowPart=udtFileSource.dwLowDateTime
udtQuadSource.u.HighPart=udtFileSource.dwHighDateTime
'add the interval
udtQuadSource.QuadPart = udtQuadSource.QuadPart + Amount
'copy back to dest filetime structure
udtFileDest.dwLowDateTime=udtQuadSource.u.LowPart
udtFileDest.dwHighDateTime=udtQuadSource.u.HighPart
'convert filetime to systemtime
filetimetosystemtime udtFileDest,udtDest
END SUB
FUNCTION PBMAIN () AS LONG
LOCAL udtNow AS SYSTEMTIME,udtCompare AS SYSTEMTIME,qdDifference AS QUAD
'Get the current (users) time
GetLocalTime udtNow
'Now we will add on 3 days to the system time and store the result in udtCompare
DateAdd %INT_DAYS,udtNow,3,udtCompare
'Now get the number of hours difference between the 2 dates
qdDifference=DateDiff(%INT_HOURS,udtNow,udtCompare)
MSGBOX STR$(qdDifference) + " hours between the dates"
END FUNCTION
------------------
#COMPILE EXE
#DIM ALL
#INCLUDE "win32api.inc"
'The following are interval specifications for the DateDiff and DateAdd functions
'Only periods of fixed time are included (so no months or years)
'Although these could be easily calculated by other means
%INT_SECONDS = 10000000
%INT_MINUTES = 600000000
%INT_HOURS = 36000000000
%INT_DAYS = 864000000000
TYPE DateSplit
LowPart AS DWORD
HighPart AS DWORD
END TYPE
UNION DateQuad
U AS DateSplit
QuadPart AS QUAD
END UNION
FUNCTION DateDiff(BYVAL Interval AS QUAD,BYVAL udtSource AS SYSTEMTIME,BYVAL udtDest AS SYSTEMTIME) AS QUAD
LOCAL udtFileSource AS FILETIME,udtFileDest AS FILETIME
LOCAL udtQuadSource AS DateQuad,udtQuadDest AS DateQuad
'convert to filetime
systemtimetofiletime udtSource,udtFileSource
systemtimetofiletime udtDest,udtFileDest
'convert to quad time
udtQuadSource.u.LowPart=udtFileSource.dwLowDateTime
udtQuadSource.u.HighPart=udtFileSource.dwHighDateTime
udtQuadDest.u.LowPart=udtFileDest.dwLowDateTime
udtQuadDest.u.HighPart=udtFileDest.dwHighDateTime
FUNCTION=(udtQuadDest.QuadPart - udtQuadSource.QuadPart)\interval
END FUNCTION
SUB DateAdd(BYVAL Interval AS QUAD,BYVAL udtSource AS SYSTEMTIME,BYVAL Amount AS QUAD,BYREF udtDest AS SYSTEMTIME)
Amount=Amount * Interval
LOCAL udtFileSource AS FILETIME,udtFileDest AS FILETIME
LOCAL udtQuadSource AS DateQuad,udtQuadDest AS DateQuad
'convert source to FileTime
systemtimetofiletime udtSource,udtFileSource
'convert to quad time
udtQuadSource.u.LowPart=udtFileSource.dwLowDateTime
udtQuadSource.u.HighPart=udtFileSource.dwHighDateTime
'add the interval
udtQuadSource.QuadPart = udtQuadSource.QuadPart + Amount
'copy back to dest filetime structure
udtFileDest.dwLowDateTime=udtQuadSource.u.LowPart
udtFileDest.dwHighDateTime=udtQuadSource.u.HighPart
'convert filetime to systemtime
filetimetosystemtime udtFileDest,udtDest
END SUB
FUNCTION PBMAIN () AS LONG
LOCAL udtNow AS SYSTEMTIME,udtCompare AS SYSTEMTIME,qdDifference AS QUAD
'Get the current (users) time
GetLocalTime udtNow
'Now we will add on 3 days to the system time and store the result in udtCompare
DateAdd %INT_DAYS,udtNow,3,udtCompare
'Now get the number of hours difference between the 2 dates
qdDifference=DateDiff(%INT_HOURS,udtNow,udtCompare)
MSGBOX STR$(qdDifference) + " hours between the dates"
END FUNCTION
------------------