3

我有三个可编辑的日期/时间字段,前两个是(field1 和 field2),样式:日历/时间控件。他们都显示时间:小时和分钟,例如:15:51。

第三个字段也是(可编辑的),我想显示字段 1 和字段 2 之间的区别。

例如:如果 field1 是 14:41,field2 是 14:30,则 field3 = 00:11。我试过 field1-field2 但没有用。该表单具有自动刷新字段属性。谢谢!

4

3 回答 3

3

您的第三个字段需要计算,不可编辑。

如果由于某种原因它必须是可编辑的,并且您希望它在其他两个字段更改时更新,请执行以下操作:

创建一个新字段并使其为显示计算并隐藏。给它一个这样的公式

@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]);
""

菲尔

于 2012-09-13T13:46:26.173 回答
1

我写了这段代码,更容易......

字段“开始时间”和“结束时间”:键入日期/时间,使用日历/时间控件,将其设置为仅显示时间。检查属性“值更改后运行退出/OnChange 事件”。退出事件应如下所示:

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

字段“持续时间”:可编辑的文本字段,但隐藏。

字段“dspDuration”:为显示文本字段计算。值只是“持续时间”(没有引号)。

然后将以下代码添加到表单全局部分:

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

于 2012-09-14T19:22:47.373 回答
0

确保您了解两个日期时间字段之间的差异。如果需要,可以使用 @TextToTime 公式将文本转换为日期时间类型。

然后只需从第二个日期中减去第一个日期,您就会得到以秒为单位的差异。

然后将其除以 60 以分钟为单位得到差异。

于 2012-09-13T13:19:30.540 回答