设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3252|回复: 6

[模块/函数] 【Access小品】周而复始 -- 获取每月各周日期范围示例

[复制链接]
发表于 2015-4-27 12:24:22 | 显示全部楼层 |阅读模式
  最近有版友问到统计每月中各周的数据问题,这个问题的解决要点是如何获得每月中各周的日期范围。而获得各周的日期范围的难点,又在于第一周和最后一周可能不是完整的七天。时间的流逝是周而复始的,但由于以月度和周两个时间度量来计算,就可能造成某一种时间度量(周)在另一种度量(月)的约束下不一定周而复始。注意这里说的不能周而复始的前提是因为另一种度量的约束,也就是说没有这种约束,依然是周而复始的。

  前面我们讨论周在月中不完全能周而复始的原因并不重要,就本问题而言最重要的是观察到第一周和最后一周可能不是完整的七天。有了这个对问题的观察,我们也就有了解决问题的思考方向,由此入手也就不难解决问题。在本示例中主要采用一个自定义的函数来处理问题,这个自定义函数大体可以按如下代码编写:

Public Function WeekDateArr(ByVal y As Integer, ByVal m As Integer) As Variant
    '功能:返回当前月度中各周的日期范围
    '参数:y -- 年度, m -- 月度
    Dim monthday0 As Date, monthday1 As Date
    Dim weekday0 As Date, weekday1 As Date
    Dim Arr() As String
    Dim i As Integer

    monthday0 = DateSerial(y, m, 1)
    monthday1 = DateSerial(y, m + 1, 0)

    '第一周日期范围
    weekday0 = monthday0
    weekday1 = DateAdd("d", 7 - Weekday(weekday0, vbMonday), weekday0)
    ReDim Preserve Arr(1, 0)
    Arr(0, 0) = weekday0
    Arr(1, 0) = weekday1
    i = 0

    Do While weekday1 < monthday1
        weekday0 = DateAdd("d", 1, weekday1)
        weekday1 = DateAdd("d", 6, weekday0)
        If weekday1 > monthday1 Then weekday1 = monthday1
        i = i + 1
        ReDim Preserve Arr(1, i)
        Arr(0, i) = weekday0
        Arr(1, i) = weekday1
    Loop

    WeekDateArr = Arr
End Function


示例:

视图:





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 2经验 +42 金钱 +30 V币 +5 收起 理由
tmtony + 12
5988143 + 30 + 30 + 5 (技术)原创精品课程、录像、代码、教程(.

查看全部评分

本帖被以下淘专辑推荐:

发表于 2015-4-27 13:07:03 | 显示全部楼层
看看这个就是todaynew 老师帮助做的!用处非常大

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2015-4-27 13:20:43 | 显示全部楼层
老汉的作品一往如故的收藏中~

点击这里给我发消息

发表于 2015-4-27 14:28:08 | 显示全部楼层
收藏了!
回复

使用道具 举报

发表于 2016-3-24 12:01:21 | 显示全部楼层
收藏学习
回复

使用道具 举报

发表于 2016-8-20 15:15:51 | 显示全部楼层
已经下载学习,谢谢
发表于 2019-10-2 18:11:20 | 显示全部楼层
谢谢分享!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-3-28 18:51 , Processed in 0.120508 second(s), 38 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表