我有三个可编辑的日期/时间字段,前两个是(field1和field2),样式:日历/时间控件。他们两个都显示时间:小时和分钟,例如:15:51。
第三个字段(可编辑)我想显示field1和field2之间的区别。
例如:如果field1是14:41而field2是14:30,则field3 = 00:11。我已经尝试过field1-field2但是没有用。该表单具有自动刷新字段属性。谢谢!
答案 0 :(得分: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]);
""
菲尔
答案 1 :(得分:1)
我写了这段代码,更容易......
字段'StartTime'和'EndTime': 键入日期/时间,使用日历/时间控件,将其设置为仅显示时间。 检查属性“值更改后运行退出/ 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
就是这样。容易,不是吗?如果你想修改输出(持续时间),你可以很容易地做到这一点,也许可以通过将其延长60来将其改为几分钟。
答案 2 :(得分:0)
确保您获得两个日期时间字段之间的差异。如果需要,可以使用@TextToTime公式将文本转换为日期时间类型。
然后从第二个日期中减去第一个日期,您将获得秒数的差异。
然后将其除以60得到分钟的差异。