[分享]日期段筛选(代码并非完美,请老师指正)
红色部分为帮助文件介绍
按时段加载数据
我们经常需要加载某个时段的数据,下面列出了各种情况的加载代码给大家参考。
加载指定年份数据
例如加载2011年的订单:
Dim y As Integer = 2011 '指定年份
Dim dt1 As New Date(y, 1, 1)
Dim dt2 As New Date(y, 12, 31)
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
DataTables("订单").LoadFilter = Filter
DataTables("订单").Load()
加载指定月份数据
例如加载2011年6月份的订单:
Dim y As Integer = 2011 '指定年份
Dim m As Integer = 6 '指定月份
Dim dt1 As New Date(y, m, 1)
Dim dt2 As New Date(y, m, Date.DaysInMonth(2011,6)) '获取该月的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
DataTables("订单").LoadFilter = Filter
DataTables("订单").Load()
加载指定季度的数据
例如加载2011年2季度的订单:
Dim y As Integer = 2011 '指定年份
Dim q As Integer = 2 '指定季度
Dim dt1 As New Date(y, 3 * (q - 1) + 1, 1) '获取该季度的第一天
Dim dt2 As New Date(y, 3 * q, Date.DaysInMonth(2011,3 * q)) '获取该季度的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
DataTables("订单").LoadFilter = Filter
DataTables("订单").Load()
加载本年数据
例如加载本年的订单:
Dim y As Integer = Date.Today.Year
Dim dt1 As New Date(y, 1, 1)
Dim dt2 As New Date(y, 12, 31)
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
DataTables("订单").LoadFilter = Filter
DataTables("订单").Load()
加载本季度数据
例如加载本季度的订单:
Dim y As Integer = Date.Today.Year
Dim q As Integer = (Date.Today.Month - 1) \ 3 + 1 '计算现在是第几个季度
Dim dt1 As New Date(y, 3 * (q - 1) + 1, 1) '获取本季度的第一天
Dim dt2 As New Date(y, 3 * q, Date.DaysInMonth(2011,3 * q)) '获取本季度的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
DataTables("订单").LoadFilter = Filter
DataTables("订单").Load()
注意第二行代码,用的是整除运算符(\),而不是通常的除法运算符(/),整除运算符会直接对结果取整。
加载本月数据
例如加载本月的订单:
Dim y As Integer = Date.Today.Year
Dim m As Integer = Date.Today.Month
Dim dt1 As New Date(y, m, 1)
Dim dt2 As New Date(y, m, Date.DaysInMonth(y, m)) '获取本月的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
DataTables("订单").LoadFilter = Filter
DataTables("订单").Load()
加载本周数据
例如加载本周的订单:
Dim y As Integer = Date.Today.Year
Dim w As Integer = Date.Today.DayOfWeek '算出今天是星期几
Dim dt1 As Date = Date.Today.AddDays(-w) '获取本周的第一天
Dim dt2 As Date = Date.Today.AddDays(6 - w) '获取本周的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
DataTables("订单").LoadFilter = Filter
DataTables("订单").Load()
注意事项
1、前面的代码全部是以内部表或Access数据源作为数据源的,如果你使用SQL Server作为数据源,那么日期不是用符号#括起来,而是用单引号括起来,所以下面这样代码:
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
应该改为:
Filter = "日期 >= '" & dt1 & "' And 日期 <= '" & dt2 & "'"
2、这一节虽然以加载数据为例,但有关知识同样可以用于筛选,只需将最好两行代码:
DataTables("订单").LoadFilter = Filter
DataTables("订单").Load()
改为:
Tables("订单").Filter = Filter
即可用于筛选数据。
例如筛选本周订单:
Dim y As Integer = Date.Today.Year
Dim w As Integer = Date.Today.DayOfWeek '算出今天是星期几
Dim dt1 As Date = Date.Today.AddDays(-w) '获取本周的第一天
Dim dt2 As Date = Date.Today.AddDays(6 - w) '获取本周的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
Tables("订单").Filter = Filter
l 当前表日期段筛选
本日
Dim y As Integer = Date.Today.Year
Dim m As Integer = Date.Today.Month
Dim d As Integer = Date.Today.day
Dim dt1 As New Date(y, m, d) '获取本月的最后一天
Dim dt2 As New Date(y, m, d) '获取本月的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
昨日
Dim y As Integer = Date.Today.Year
Dim m As Integer = Date.Today.Month
Dim d As Integer = Date.Today.day
'For Each dr As DataRow In DataTables("月份起始设置").DataRows
If d>=2
Dim dt1 As New Date(y, m, d-1)
Dim dt2 As New Date(y, m, d-1)
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
ElseIf d=1 And m>=2 Then
Dim dt1 As New Date(y, m-1, Date.DaysInMonth(y, m-1))
Dim dt2 As New Date(y, m-1, Date.DaysInMonth(y, m-1))
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
ElseIf d=1 And m=1 Then
Dim dt1 As New Date(y-1, m+11, Date.DaysInMonth(y-1, m+11))
Dim dt2 As New Date(y-1, m+11, Date.DaysInMonth(y-1, m+11))
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
End If
'Next
本月
Dim y As Integer = Date.Today.Year
Dim m As Integer = Date.Today.Month
Dim d As Integer = Date.Today.day
Dim dt1 As New Date(y, m, 1)
Dim dt2 As New Date(y, m, Date.DaysInMonth(y, m)) '获取本月的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
上月
Dim y As Integer = Date.Today.Year
Dim m As Integer = Date.Today.Month
Dim d As Integer = Date.Today.day
If m>=2
Dim dt1 As New Date(y, m-1, 1)
Dim dt2 As New Date(y, m-1, Date.DaysInMonth(y, m-1)) '获取本月的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
ElseIf m=1 Then
Dim dt1 As New Date(y-1, m+11, 1)
Dim dt2 As New Date(y-1, m+11, Date.DaysInMonth(y-1, m+11)) '获取本月的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
End If
本周
Dim y As Integer = Date.Today.Year
Dim w As Integer = Date.Today.DayOfWeek
Dim dt1 As Date = Date.Today.AddDays(-w)
Dim dt2 As Date = Date.Today.AddDays(6 - w)
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
上周
Dim y As Integer = Date.Today.Year
Dim w As Integer = Date.Today.DayOfWeek '算出今天是星期几
Dim dt1 As Date = Date.Today.AddDays(-w-7) '获取本周的第一天
Dim dt2 As Date = Date.Today.AddDays(6 - w-7) '获取本周的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
本季
Dim y As Integer = Date.Today.Year
Dim q As Integer = (Date.Today.Month - 1) \ 3 + 1
Dim t As Table = CurrentTable
Dim dt1 As New Date(y, 3 * (q - 1) + 1, 1)
Dim dt2 As New Date(y, 3 * q, Date.DaysInMonth(y,3 * q))
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
上季
Dim y As Integer = Date.Today.Year
Dim q As Integer = (Date.Today.Month - 1) \ 3 + 1 '计算现在是第几个季度
If q>=2
Dim dt1 As New Date(y, 3 * ((q-1) - 1) + 1, 1) '获取本季度的第一天
Dim dt2 As New Date(y, 3 * (q-1), Date.DaysInMonth(y,3 * (q-1))) '获取本季度的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
ElseIf q=1
Dim dt1 As New Date(y-1, 3 * (q+3 - 1) + 1, 1) '获取本季度的第一天
Dim dt2 As New Date(y-1, 3 * (q+3), Date.DaysInMonth(y-1,3 * (q+3))) '获取本季度的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
End If
今年
Dim y As Integer = Date.Today.Year
Dim dt1 As New Date(y, 1, 1)
Dim dt2 As New Date(y, 12, 31)
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
去年
Dim y As Integer = Date.Today.Year
Dim dt1 As New Date(y-1, 1, 1)
Dim dt2 As New Date(y-1, 12, 31)
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
自定义时间
此主题相关图片如下:image001.jpg
按设定日期计算年月季日
For Each dr As DataRow In DataTables("月份起始日设置").DataRows
Dim qs As Integer = dr("每月第一天")
Dim js As Integer = dr("每月最后一天")
If e.DataCol.Name = "日期" Then
If e.DataRow.IsNull("日期") Then
e.DataRow("年") = Nothing
e.DataRow("月") = Nothing
e.DataRow("季") = Nothing
e.DataRow("日") = Nothing
Else
Dim d As Date = e.NewValue
If d.Month = 12 And d.day >= qs Then
e.DataRow("年") = d.Year +1
Else
e.DataRow("年") = d.Year
End If
If d.Day < qs Then
e.DataRow("月") = d.Month
Else If d.Month = 11 Then
e.DataRow("月") = 12
Else
e.DataRow("月") = (d.Month + 1) Mod 12
End If
If d.day > js Then
e.DataRow("季") = DatePart("q",d.AddDays(10))
Else
e.DataRow("季") = DatePart("q",d)
End If
e.DataRow("日") = d.Day
End If
End If
Next
本月
Dim y As Integer = Date.Today.Year
Dim m As Integer = Date.Today.Month
Dim d As Integer = Date.Today.day
For Each dr As DataRow In DataTables("月份起始日设置").DataRows
Dim qs As Integer = dr("每月第一天")
Dim js As Integer = dr("每月最后一天")
If m>=1 And d>=qs
Dim dt1 As New Date(y, m, qs)
Dim dt2 As New Date(y, m+1, js) '获取本月的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
ElseIf m=1 And d<qs
Dim dt1 As New Date(y-1, m+11, qs)
Dim dt2 As New Date(y, m, js) '获取本月的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
End If
Next
上月
Dim y As Integer = Date.Today.Year
Dim m As Integer = Date.Today.Month
Dim d As Integer = Date.Today.day
For Each dr As DataRow In DataTables("月份起始日设置").DataRows
Dim qs As Integer = dr("每月第一天")
Dim js As Integer = dr("每月最后一天")
If m>2 And d>=qs
Dim dt1 As New Date(y, m-2, qs)
Dim dt2 As New Date(y, m-1, js) '获取本月的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
ElseIf m=2 And d>=qs
Dim dt1 As New Date(y-1, m+11, qs)
Dim dt2 As New Date(y, m-1, js) '获取本月的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
ElseIf m=1 And d<qs
Dim dt1 As New Date(y-1, m+10, qs)
Dim dt2 As New Date(y-1, m+11, js) '获取本月的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
End If
Next
今年
Dim y As Integer = Date.Today.Year
Dim m As Integer = Date.Today.Month
Dim d As Integer = Date.Today.day
For Each dr As DataRow In DataTables("月份起始日设置").DataRows
Dim qs As Integer = dr("每月第一天")
Dim js As Integer = dr("每月最后一天")
If m>=1 And m<11
Dim dt1 As New Date(y-1, 12, qs)
Dim dt2 As New Date(y, m, js) '获取本月的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
ElseIf m=11
Dim dt1 As New Date(y-1, 12, qs)
Dim dt2 As New Date(y, m, js) '获取本月的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
ElseIf m=12 And d<qs
Dim dt1 As New Date(y-1, 12, qs)
Dim dt2 As New Date(y, m, js) '获取本月的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
ElseIf m=12 And d>=qs
Dim dt1 As New Date(y, 12, qs)
Dim dt2 As New Date(y+1, m, js) '获取本月的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
End If
Next
今年
Dim y As Integer = Date.Today.Year
Dim m As Integer = Date.Today.Month
Dim d As Integer = Date.Today.day
For Each dr As DataRow In DataTables("月份起始日设置").DataRows
Dim qs As Integer = dr("每月第一天")
Dim js As Integer = dr("每月最后一天")
Dim dt1 As New Date(y-1, 12, qs)
Dim dt2 As New Date(y, 12, js) '获取本月的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
Next
去年
Dim y As Integer = Date.Today.Year
Dim m As Integer = Date.Today.Month
Dim d As Integer = Date.Today.day
For Each dr As DataRow In DataTables("月份起始日设置").DataRows
Dim qs As Integer = dr("每月第一天")
Dim js As Integer = dr("每月最后一天")
Dim dt1 As New Date(y-2, 12, qs)
Dim dt2 As New Date(y-1, 12, js) '获取本月的最后一天
Dim Filter As String
Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
CurrentTable.Filter = Filter
Next
l
[此贴子已经被作者于2014-9-15 18:53:23编辑过]