Issue: 
Need to determine if a date is in between two other dates. 
 
Solution A: 
Use TimeDifferenceDouble function: 
 
Function IsInTimeRange(s As NotesSession, timestart As String, timeend As String) As Integer 
	' checks to see if time passed in time range, returns one for success/true (e.g. 09:01:00 and 23:25:00) 
	Dim startNDT As NotesDateTime 
	Dim endNDT As NotesDateTime 
	Dim nowNDT As New NotesDateTime(Now) 
	 
	On Error Goto FErrorHandler	 
	 
	' do basic sanity check 
	If (timestart="" Or timeend="") Then 
		IsInTimeRange = 0 
		Exit Function 
	End If 
	 
	' set times 
	Set startNDT = New NotesDateTime(nowNDT.DateOnly & " " & timestart) 
	Set endNDT = New NotesDateTime(nowNDT.DateOnly & " " & timeend) 
	If (startNDT Is Nothing Or endNDT Is Nothing) Then 
		IsInTimeRange=0 
		Exit Function 
	End If 
	Print "Start: " & Cstr(startNDT.LocalTime) 
	Print "End: " & Cstr(endNDT.LocalTime) 
	 
	' check if now after start time 
	Print "start: " & Cstr(nowNDT.TimeDifferenceDouble( startNDT )) 
	Print "end: " & Cstr(nowNDT.TimeDifferenceDouble( endNDT )) 
	If (nowNDT.TimeDifferenceDouble( startNDT ) > 0)  Then 
		Print "After startNDT today (" & Cstr(startNDT.LocalTime) & ") . . ." 
	Else 
		IsInTimeRange=0 
		Exit Function 
	End If 
	If (nowNDT.TimeDifferenceDouble( endNDT ) < 0)  Then 
		Print "Before endNDT today (" & Cstr(endNDT.LocalTime) & "). . ." 
	Else 
		IsInTimeRange=0 
		Exit Function 
	End If 
	 
	' return true 
	Print ". . . within time range." 
	IsInTimeRange=1 
	 
ErrorExit: 
	' return 
	Exit Function 
	 
FErrorHandler: 
	Print "IsInTimeRange-Error: " & Cstr(Erl) & ", " & Error$ & "." 
	Resume ErrorExit 
End Function 
 
 
Solution B: 
The following is (in my opinion) a more logical way of comparing dates than using the .TimeDifference or TimeDiffereneDouble method. The sample code below creates two time objects and makes them a NotesDateRange. It then compares the datetime of a third object checking to see if it is within the range dates. 
 
 
Dim dateBegin As NotesDateTime		' beginning date of range to return 
Dim dateEnd As NotesDateTime		' ending date of range to return 
Dim dateRange As NotesDateRange	' range of time for comparison to 2nd dateDoc 
Dim dateDoc As NotesDateTime		' compare date in dateDoc 
Dim dateLS As Variant	' dateDoc as a LS Variant 
 
... 
Set doc=s.DocumentContext 
... 
 
Set dateBegin = New NotesDateTime(doc.DateBegin(0)) 
Set dateEnd = New NotesDateTime(doc.DateEnd(0)) 
Set dateRange = s.CreateDateRange() 
Set dateRange.StartDateTime = dateBegin 
Set dateRange.EndDateTime = dateEnd 
 
... 
Set e = x.GetFirstEntry 
... 
Set dateDoc = New NotesDateTime(e.ColumnValues(0)) 
If Not (dateDoc Is Nothing) Then 
	dateLS = dateDoc.LSLocalTime	' get the local time LS time variant object 
	If ((dateLS >= dateRange.StartDateTime.LSLocalTime) And (dateLS <= dateRange.EndDateTime.LSLocalTime)) Then 
			' add data since within dates requested		 
		... 
		do whatever 
		... 
	End If 
End If
  
previous page
 
  |