两个DateTimePicker的时间差

plm310 2010-04-16 01:46:58
Dim days As Long
Dim a1, a2 As System.TimeSpan
a1 = New System.TimeSpan(Me.DateTimePicker1.Value.Ticks)
a2 = New System.TimeSpan(Me.DateTimePicker2.Value.Ticks)
days = a2.TotalDays - a1.TotalDays
这是我写的代码可以算出天数差,小弟现在有一个问题是不想把周末的二天算进去。
要怎么写啊!
...全文
428 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
kuhura 2010-04-23
  • 打赏
  • 举报
回复
ls是?
plm310 2010-04-23
  • 打赏
  • 举报
回复
Dim date1 As Date = Me.DateTimePicker1.Value
Dim date2 As Date = Me.DateTimePicker2.Value
Dim dayWeek As Day '临时变量
Dim intCount As Integer = 0 'DateDiff("ww", date1, date2) + 2
Dim intCount1 As Integer = 0
Dim intTotalDays As Integer = DateDiff("d", date1, date2) + 1 '算差值

For intI As Integer = 0 To intTotalDays - 1 '循环算出不是 星期六 和星期日的总天数
dayWeek = date1.AddDays(intI).DayOfWeek

If dayWeek <> DayOfWeek.Saturday And dayWeek <> DayOfWeek.Sunday Then
intCount += 1
Else
intCount1 += 1
End If
Next
TextBox8.Text = intCount.ToString
兔子-顾问 2010-04-21
  • 打赏
  • 举报
回复
直接新建项目,拖个按钮,贴代码。应该就能直接看到结果了。楼主测试过回复你的方法么?

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim dt1 As New DateTime(2010, 4, 12)
Dim dt2 As New DateTime(2010, 4, 19)
Dim days As Integer
While (dt2 - dt1).Days > 1 '去除头尾,所以>1
dt1 = dt1.AddDays(1)
If dt1.DayOfWeek = DayOfWeek.Saturday Or dt1.DayOfWeek = DayOfWeek.Sunday Then Continue While
days += 1
End While
'如果你要算上开始那天和结束的日子,就+2
days += 2
MessageBox.Show(days)
End Sub
兔子-顾问 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 plm310 的回复:]
我不是很明白啊
[/Quote]

其实已经有正确答案了。最好,最容易的就是数出来,毕竟没多少次循环。6楼方法已经可以用了。
plm310 2010-04-21
  • 打赏
  • 举报
回复
我不是很明白啊
ncqingchuan1976 2010-04-19
  • 打赏
  • 举报
回复
不好意思参数选错了,选成星期四了,这下正确了.

Private Sub Form3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
Dim T1 As Date = CDate("2010-1-1")
Dim T2 As Date = CDate("2010-1-30")

Dim Count As Integer = 0


While T1 <= T2



If Not (T1.DayOfWeek = DayOfWeek.Saturday OrElse T1.DayOfWeek = DayOfWeek.Sunday) Then
Count += 1
End If

T1 = T1.AddDays(1)
End While
Me.Text = Count



End Sub
ncqingchuan1976 2010-04-19
  • 打赏
  • 举报
回复
上面整错了

Private Sub Form3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
Dim T1 As Date = CDate("2010-4-7")
Dim T2 As Date = CDate("2010-4-30")

Dim Count As Integer = 1


While T1 <= T2



If T1.DayOfWeek <> DayOfWeek.Thursday AndAlso T1.DayOfWeek <> DayOfWeek.Sunday Then
Count += 1
End If

T1 = T1.AddDays(1)
End While
Me.Text = Count
End Sub
ncqingchuan1976 2010-04-19
  • 打赏
  • 举报
回复


Private Sub Form3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
Dim T1 As Date = CDate("2010-1-1")
Dim T2 As Date = CDate("2010-1-7")

Dim Count As Integer = 0
Dim a As Boolean = True

While a = True
T1 = T1.AddDays(1)
If T1 < T2 Then


If T1.DayOfWeek <> DayOfWeek.Wednesday OrElse T1.DayOfWeek <> DayOfWeek.Sunday Then
Count += 1
End If
Else
a = False

End If

End While
Me.Text = Count



End Sub
plm310 2010-04-19
  • 打赏
  • 举报
回复
谢谢你了!
兔子-顾问 2010-04-17
  • 打赏
  • 举报
回复
ls方法也对哦。老想着如何总结个公式了。其实循环就可以了。就算几十年,也不过几万次循环而已。数出来也挺快。
kuhura 2010-04-17
  • 打赏
  • 举报
回复
,似乎不对,我再看看
kuhura 2010-04-17
  • 打赏
  • 举报
回复
Dim a1, a2 As System.TimeSpan
a1 = New System.TimeSpan(Me.DateTimePicker1.Value.Ticks)
a2 = New System.TimeSpan(Me.DateTimePicker2.Value.Ticks)
Dim days As Integer = a2.TotalDays - a1.TotalDays
Dim nDays As Integer = DateDiff(DateInterval.Weekday, DateTimePicker1.Value, DateTimePicker2.Value)
MsgBox(nDays + (days \ 7) * 5)

测试的不太仔细,应该是可以的。没有算当天
kuhura 2010-04-17
  • 打赏
  • 举报
回复
挺麻烦的,不知道行不行,试试看
Dim a1, a2 As System.TimeSpan
a1 = New System.TimeSpan(Me.DateTimePicker1.Value.Ticks)
a2 = New System.TimeSpan(Me.DateTimePicker2.Value.Ticks)
Dim days As Integer = a2.TotalDays - a1.TotalDays

Dim W1 As System.DayOfWeek, W2 As System.DayOfWeek
W1 = DateTimePicker1.Value.DayOfWeek
W2 = DateTimePicker2.Value.DayOfWeek
If W1 = DayOfWeek.Saturday Then
days -= 2
W1 = DayOfWeek.Monday
ElseIf W1 = DayOfWeek.Sunday Then
W1 = DayOfWeek.Monday
days -= 1
End If

If W2 = DayOfWeek.Saturday Then
days -= 1
W2 = DayOfWeek.Friday
ElseIf W2 = DayOfWeek.Sunday Then
days -= 2
W2 = DayOfWeek.Friday
End If

Dim nDays As Integer = IIf(W2 < W1, 5 - (W2 - W1), W2 - W1) + 1

MsgBox(nDays + (days \ 7) * 5)
xingyuebuyu 2010-04-16
  • 打赏
  • 举报
回复
Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim dt1 As DateTime = Me.DateTimePicker1.Value

Dim dt2 As DateTime = Me.DateTimePicker2.Value
Dim t As Integer = DateTime.Compare(dt1, dt2)
Dim days As Integer = 0
If t < 0 Then
days = GetDays(dt1, dt2)
Else
days = GetDays(dt2, dt1)

End If
End Sub

Function GetDays(ByVal d1 As DateTime, ByVal d2 As DateTime) As Integer
Dim dt As DateTime = d1
Dim i As Integer = 0
While dt.DayOfYear <> d2.DayOfYear
dt = dt.AddDays(1)
If dt.DayOfWeek = DayOfWeek.Saturday Or dt.DayOfWeek = DayOfWeek.Sunday Then
Continue While
Else
i += 1
End If

End While
Return i
End Function
End Class
plm310 2010-04-16
  • 打赏
  • 举报
回复
求代码啊!
兔子-顾问 2010-04-16
  • 打赏
  • 举报
回复
情况有点多。
同样10天。可以是2周,也可以是跨越了3周的,头尾都可能要减去1~2天,中间如果跨越的周多,还要按周剪掉,稍微糊涂了下,没弄出来。
plm310 2010-04-16
  • 打赏
  • 举报
回复
不过还是要谢谢你了!
这个功能是比如请假1号到20号其中一定有周末二天在里面,是不要算出来的
兔子-顾问 2010-04-16
  • 打赏
  • 举报
回复
看上去效果不好。多测试几个就错了。忽略吧。
兔子-顾问 2010-04-16
  • 打赏
  • 举报
回复
简单测试了一下是对的,如果今天也算,就在days上加1。

Dim days As Long
Dim ts As System.TimeSpan = Me.DateTimePicker2.Value - Me.DateTimePicker1.Value
Dim startWeekDay As Integer = Weekday(Me.DateTimePicker1.Value) - 1
Dim endWeekDay As Integer = (startWeekDay + ts.Days Mod 6) Mod 6
If endWeekDay = 0 Then endWeekDay = 6
Dim subDays As Integer = 0
If startWeekDay >= 6 Then '6,7本来就要休息
subDays = 8 - startWeekDay
End If
If endWeekDay = 6 Then
subDays += 1
ElseIf endWeekDay = 7 Then
subDays += 2
End If
If ts.Days > ts.Days / 7 * 2 - subDays Then days = ts.Days - ts.Days / 7 * 2 - subDays
MessageBox.Show(days)

16,719

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧