如何连接文本框以在MS Access 2010中使用DateDiff

时间:2018-04-11 07:47:33

标签: sql forms textbox access datediff

我有一些文本框,我想用它来计算两个时间段之间的时间长度。

Start 0800
End 1600

Break 30

我尝试过使用DateDiff(" n",08&":"& 0016 &":"& 00) - (30 * 60)但得到#Name错误。

我还需要转换为小时分钟,如果上述功能正常工作我会使用(DateDiff(" n",08&":& #34;& 0016&":"& 00) - (30 * 60))/ 60& ":" MOD(DATEDIFF(" N" 08&安培;":"&安培; 0016&安培;":& #34;& 00) - (30 * 60))让7:30显示在最终文本框中。

1 个答案:

答案 0 :(得分:1)

要计算两次之间的小时数,减去休息时间,我们可以使用:

(StartHH+(StartMM/60)-(EndHH+(EndMM/60)-(BreakMM/60)

((16)+(00/60))-((08)+(00/60))-(30/60) = 7.5

....只要班次从未过夜。

或者,同样的结果:

StratHH-EndHH+(StartMM-EndMM-BreakMM)/60

使用TIMESERIAL的替代方法:

(TimeSerial(StartHH, StartMM, StartSS) - TimeSerial(EndHH, EndMM, EndSS) - TimeSerial(BreakHH, Break, BreakSS)) * 24

(TimeSerial(16, 0, 0) - TimeSerial(8, 0, 0) - TimeSerial(0, 30, 0)) * 24 = 7.5

...或格式化:

Format((TimeSerial(16, 0, 0) - TimeSerial(8, 0, 0) - TimeSerial(0, 30, 0)),"HH\hmm\m") = "07h30m"

Format((TimeSerial(16, 0, 0) - TimeSerial(8, 0, 0) - TimeSerial(0, 30, 0)),"HH:mm") = "07:30"

使用数据验证而不是多个文本框

作为如何简化数据输入并完全消除用户错误的示例,这里有一个使用数据验证的表单,并辅以Total Hours框进行快速验证。确保准确性的另一个好方法是,如果有预定班次,可以将实际工作时间与通知大差异进行比较。

img

我不会详细解释,因为它不是问题的一部分(并且OP似乎决心不改变),但这只需要花费几分钟才能完成。

StartTimeEndTime文本框
  - 格式:hh:nn;;"H:mm"
  - 输入掩码:90:00;0;_
  - 验证文本:Please double check your shift time!

BreakMins文字框
  - 格式:0
  - 输入掩码:00

表单模块

Option Explicit

Dim breakHr As Single, totalhr As Single

Private Sub BreakMins_Exit(Cancel As Integer)
    UpdateTotal
End Sub

Private Sub endTime_Exit(Cancel As Integer)
    UpdateTotal
End Sub

Private Sub startTime_Exit(Cancel As Integer)
    UpdateTotal
End Sub

Sub UpdateTotal()
    If Nz(startTime, 0) = 0 Or Nz(endTime, 0) = 0 Then Exit Sub
    breakHr = Val(Nz(BreakMins, 0)) / 60
    '[startTime]/[endTime] textboxes hold full datetime for easy calculation
    totalhr = (endTime - startTime) * 24 - breakHr
    total = totalhr
End Sub