注册 登录
编程论坛 VB6论坛

请教如何时间排序,取得最早时间和最晚时间?

ictest 发布于 2023-05-14 10:24, 1027 次点击
有四个字符串:
a = "10:18 11:49 13:37 15:09 19:48 "
b = "08:29 18:19 18:20 18:23 "
c = "08:39 08:41 07:21 08:30 08:20 19:47 08:47 "
d = "14:48 16:07 15:48 19:20 14:10 00:00 "

请教如何用通用的、最少的语句(不用数据库)把每一个字符串里的时间排序,并且得到最早和最晚时间?

输出:

a---min:10:18---max:19:48
b---min:08:29---max:18:23
c---min:07:21---max:19:47
d---min:14:10---max:00:00
5 回复
#2
风吹过b2023-05-14 13:04
用控件吧。
listbox 支持排序,
写一个子函数来调用吧
还有一个最后一个是怎么回事?  00:00 ,不是最小吗??

程序代码:
Option Explicit

'窗体上放一个 listbox1 ,sotred 属性设为了 true
Private Type jg
    a As Variant
    b As Variant
End Type

Private Sub Command1_Click()
Dim j As jg
Dim a, b, c, d
a = "10:18 11:49 13:37 15:09 19:48 "
b = "08:29 18:19 18:20 18:23 "
c = "08:39 08:41 07:21 08:30 08:20 19:47 08:47 "
d = "14:48 16:07 15:48 19:20 14:10 00:00 "

j = minmax(a)
Print j.a, j.b
j = minmax(b)
Print j.a, j.b
j = minmax(c)
Print j.a, j.b
j = minmax(d)
Print j.a, j.b

End Sub

Private Function minmax(s As Variant) As jg
Dim f() As String
Dim i As Long
f = Split(s, " ")
List1.Clear
For i = 0 To UBound(f)
    If Len(f(i)) > 0 Then
        List1.AddItem f(i)
    End If
Next i
minmax.a = List1.List(0)
minmax.b = List1.List(List1.ListCount - 1)
End Function
#3
ictest2023-05-14 13:32
以下是引用风吹过b在2023-5-14 13:04:14的发言:

用控件吧。
listbox 支持排序,
写一个子函数来调用吧
还有一个最后一个是怎么回事?  00:00 ,不是最小吗??

Option Explicit

'窗体上放一个 listbox1 ,sotred 属性设为了 true
Private Type jg
    a As Variant
    b As Variant
End Type

Private Sub Command1_Click()
Dim j As jg
Dim a, b, c, d
a = "10:18 11:49 13:37 15:09 19:48 "
b = "08:29 18:19 18:20 18:23 "
c = "08:39 08:41 07:21 08:30 08:20 19:47 08:47 "
d = "14:48 16:07 15:48 19:20 14:10 00:00 "

j = minmax(a)
Print j.a, j.b
j = minmax(b)
Print j.a, j.b
j = minmax(c)
Print j.a, j.b
j = minmax(d)
Print j.a, j.b

End Sub

Private Function minmax(s As Variant) As jg
Dim f() As String
Dim i As Long
f = Split(s, " ")
List1.Clear
For i = 0 To UBound(f)
    If Len(f(i)) > 0 Then
        List1.AddItem f(i)
    End If
Next i
minmax.a = List1.List(0)
minmax.b = List1.List(List1.ListCount - 1)
End Function



回复一下前辈:可以理解为班次,假设这个人今天上中班,班次时间标准为15:00——00:00,这个人上班到00:00班次结束,就算他加班到凌晨01:00,也算是前一天上班的最后时间。
#4
mrexcel2023-05-15 21:56
程序代码:
Sub Test()
Dim t(3) As String
a = "10:18 11:49 13:37 15:09 19:48 "
b = "08:29 18:19 18:20 18:23 "
c = "08:39 08:41 07:21 08:30 08:20 19:47 08:47 "
d = "14:48 16:07 15:48 19:20 14:10 00:00 "
With CreateObject("msscriptcontrol.scriptcontrol")
.Language = "javascript"
.addcode "function s(y){x=y.split(' ');x.sort();return x;}"
t(0) = "a=" & .eval("s('" & Trim(a) & "')")
t(1) = "b=" & .eval("s('" & Trim(b) & "')")
t(2) = "c=" & .eval("s('" & Trim(c) & "')")
t(3) = "d=" & .eval("s('" & Trim(d) & "')")
End With
MsgBox Join(t, vbCrLf)
End Sub
#5
cwa99582023-05-16 12:55
你这个提供的例子时间不是已经排序好了的吗?
只要取出第一个时间和最后一个时间就是了嘛。
#6
ictest2023-05-16 23:52
回复 5楼 cwa9958
c = "08:39 08:41 07:21 08:30 08:20 19:47 08:47 "
没有排序过,只提取第一个时间和最后一个时间不对。谢谢。
1