Difference between two date/time fields - Lotus No

2019-07-13 13:55发布

I have three editable date/time fields which the first two is (field1 and field2), style: Calendar/time control. Both of them are showing the time: hour and minutes, eg: 15:51.

The third field also (editable) which I want to show the difference between field1 and field2.

Eg: If field1 is 14:41 and field2 is 14:30, then field3 = 00:11. I've tried field1-field2 but isn't working. The form has automatic refresh fields property. Thanks!

3条回答
男人必须洒脱
2楼-- · 2019-07-13 14:17

I wrote this code, much easier...

Fields 'StartTime' and 'EndTime': Type Date/Time, use Calendar/Time control, set it to only display time. Check the property "Run Exiting/OnChange events after value changes". The Exiting event should look like this:

Sub Exiting(Source As Field)
    Call UpdateDuration()
End Sub

Field 'Duration': Editable text field, but hidden.

Field 'dspDuration': Computed for display text field. Value is just "Duration" (no quotes).

Then add the following code to the forms Global section:

Sub UpdateDuration()
    Dim ws As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim starttime As NotesDateTime
    Dim endtime As NotesDateTime
    Dim duration As Integer

    Set uidoc = ws.CurrentDocument
    '*** Exit if not both times are entered
    If uidoc.FieldGetText("StartTime") = "" Then
        Exit Sub
    Elseif uidoc.FieldGetText("StartTime") = "" Then
        Exit Sub        
    End If
    '*** Calculate duration in seconds and update field
    Set starttime = New NotesDateTime( uidoc.FieldGetText("StartTime") )
    Set endtime = New NotesDateTime( uidoc.FieldGetText("EndTime") )
    duration = endtime.TimeDifference( starttime )
    Call uidoc.FieldSetText("Duration", Cstr(duration) )
    Call uidoc.Refresh()
End Sub

That's it. Easy, isn't it? If you want to modify the output (duration), you can easily do that, perhaps change it into minutes by diving it by 60.

Screenshot

查看更多
【Aperson】
3楼-- · 2019-07-13 14:20

Your third field needs to be computed, not editable.

If it HAS to be editable for some reason, and you want it to update when the other two fields are changed, do this:

Create a new field and make it computed-for-display and hidden. Give it a formula like this

@If(field1=null | field2=null; @Return(""); "");
seconds := field1-field2;
hours := @Integer(seconds/3600);
minutes := @Modulo(@Integer(seconds/60); 60);
output := @Right("00" + @Text(hours); 2) + ":" + @Right("00" + @Text(minutes); 2);
@setfield("field3"; output);
@Command([ViewRefreshFields]);
""

Phil

查看更多
贼婆χ
4楼-- · 2019-07-13 14:22

Make sure you are getting the difference between two date time fields. If you need to, you can use the @TextToTime formula to convert text to a datetime type.

Then just subtract the first date from the second date and you'll get the difference in seconds.

Then divide that by 60 to get the difference in minutes.

查看更多
登录 后发表回答