很简单的。给你一个:
将这3个时间段,分别指定一个状态字
00:00-8:00 为1
16:00-20:00 为2
20:00-24:00 为3
这个过程的功能:
输入:一个时间
输出:指出这个时间属于那一个时间段,
Private Sub Set_Flags(T As Date, Et_f As Integer)
If T > Time2 Then
Et_f = 3
ElseIf T < Time2 Then
Et_f = 1
Else
Et_f = 2
End If
End Sub
---------------------
功能:指出两个时间
输入:两个时间
输出:这个两个时间相差多少天
Private Function IfSameDay(Bt As Date, Et As Date) As Integer
IfSameDay = DateDiff("d", Bt, Et)
End Function
-----------------------
功能:计算某个时间点的价值
输入:一个时间
输出:该时刻的价钱
Private Function Cur_Money(T As Date, T_F As Integer) As Integer
Select Case T_F
Case 1
Cur_Money = DateDiff("h", T, "00:00") * 60
Case 2
Cur_Money = DateDiff("h", T, "16:00") * 30 + 480 '480是整个是00:00-8:00的价钱 8*60
Case 3
Cur_Money = DateDiff("h", T, "20:00") * 80 + 600 ’600是从00:00-8:00 和16:00-20:00 的价值总和:60*8+30*4
End Select
End Function
--------------------------------
功能:算出2个时间之间的价值
输出
Bt 是开始时间。Et 是结束时间
Bt_Status 是指出Bt是属于哪个时间段的
Et_Status 是指出Et是属于哪个时间段的
Private Sub Sum_Up(Bt as date,Et as Date)
Dim Bt_Status As Integer
Dim Et_Status As Integer
Dim Bt As Date, Et As Date
Set_Flags Bt, Bt_Status
Set_Flags Et, Et_Status
'判断2个时间是不是同一天,记住这里我只处理了差一天的情况。我是根据你说的,我觉得不应该有差几天的情况,如果有的话,自己处理一下就行了
If IfSameDay(Bt, Et) <> 0 Then
Debug.Print Cur_Money(Et, Et_Status) - Cur_Money(Bt, Bt_Status)
Else
Debug.Print 920 - Cur_Money(Bt, Bt_Status) + Cur_Money(Et, Et_Status)
End If
End Sub这个我没有很详细的写出,只是写了个大概,这也是一种想法。可以参考一下
将这3个时间段,分别指定一个状态字
00:00-8:00 为1
16:00-20:00 为2
20:00-24:00 为3
这个过程的功能:
输入:一个时间
输出:指出这个时间属于那一个时间段,
Private Sub Set_Flags(T As Date, Et_f As Integer)
If T > Time2 Then
Et_f = 3
ElseIf T < Time2 Then
Et_f = 1
Else
Et_f = 2
End If
End Sub
---------------------
功能:指出两个时间
输入:两个时间
输出:这个两个时间相差多少天
Private Function IfSameDay(Bt As Date, Et As Date) As Integer
IfSameDay = DateDiff("d", Bt, Et)
End Function
-----------------------
功能:计算某个时间点的价值
输入:一个时间
输出:该时刻的价钱
Private Function Cur_Money(T As Date, T_F As Integer) As Integer
Select Case T_F
Case 1
Cur_Money = DateDiff("h", T, "00:00") * 60
Case 2
Cur_Money = DateDiff("h", T, "16:00") * 30 + 480 '480是整个是00:00-8:00的价钱 8*60
Case 3
Cur_Money = DateDiff("h", T, "20:00") * 80 + 600 ’600是从00:00-8:00 和16:00-20:00 的价值总和:60*8+30*4
End Select
End Function
--------------------------------
功能:算出2个时间之间的价值
输出
Bt 是开始时间。Et 是结束时间
Bt_Status 是指出Bt是属于哪个时间段的
Et_Status 是指出Et是属于哪个时间段的
Private Sub Sum_Up(Bt as date,Et as Date)
Dim Bt_Status As Integer
Dim Et_Status As Integer
Dim Bt As Date, Et As Date
Set_Flags Bt, Bt_Status
Set_Flags Et, Et_Status
'判断2个时间是不是同一天,记住这里我只处理了差一天的情况。我是根据你说的,我觉得不应该有差几天的情况,如果有的话,自己处理一下就行了
If IfSameDay(Bt, Et) <> 0 Then
Debug.Print Cur_Money(Et, Et_Status) - Cur_Money(Bt, Bt_Status)
Else
Debug.Print 920 - Cur_Money(Bt, Bt_Status) + Cur_Money(Et, Et_Status)
End If
End Sub这个我没有很详细的写出,只是写了个大概,这也是一种想法。可以参考一下
意思就是当时间大于20:00时,Et_f = 3小于16:00时,Et_f = 1剩下的为2
这就从Et_f 就可以知道这个时间是属于哪个时间段的了