设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 4162|回复: 12
打印 上一主题 下一主题

[模块/函数] 请教!如何判断每月最后一个周五是几号?

[复制链接]
跳转到指定楼层
1#
发表于 2016-9-29 21:48:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
同题!
望高手指点
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2016-9-29 21:51:22 | 只看该作者
本帖最后由 周义坤 于 2016-9-29 22:43 编辑
  1. SELECT DATEADD("ww",DATEDIFF("ww",iif(weekday('2016-4-30')<5,1,0),'2016-4-30')-1,1)+5
复制代码

点击这里给我发消息

3#
发表于 2016-9-29 22:25:54 | 只看该作者
简单写了一个,应该还可以优化,大家跟贴其它方法。

''======================================================
''函数名称: GetLastFriday  (获取指定日期所在月的最后星期几是哪一天)  版本:1.01
''调用示例: gf_MsgBox(#2016/10/01#,5)
''           获取 2016年10月 这月最后一个星期五 是几号
''
''输入参数: (必需)datDate    Date      指定日期
''           (必需)lngWeekday   Long    星期几,1代表星期一,2代表星期二.... 7代表星期天

''返    回: Date  获得需要的日期
''适应版本: 97,2000,XP,2003,2007,2010,2013,2016 compatible
''作    者: 王宇虹   整理:王宇虹-Office中国
''关 键 字: 最后  月  星期几
''推荐指数: 3
''难度等级: 3
''适应场合: 根据星期取日期
''说    明: 还需测试不同的电脑日期格式对函数结果有否影响
''===================================================
''GUID: 72179DB9-4BBD-.... 编码:023458 创建:2016/09/29 更新:2016/09/29
''===================================================
Public Function GetLastFriday(datDate As Date, lngWeekday As Long) As Date

On Error GoTo Err_Handler
  Dim datLastDate As Date
  Dim lngLastDateWeekDay As Long
  Dim lngDiff As Long
  datLastDate = CDate(Year(datDate) & "/" & Month(datDate) & "/01")
  datLastDate = DateAdd("m", 1, datLastDate) - 1
  lngLastDateWeekDay = Weekday(datLastDate, vbMonday)
  If lngLastDateWeekDay >= lngWeekday Then
     lngDiff = lngLastDateWeekDay - lngWeekday
  Else
      lngDiff = lngLastDateWeekDay + 7 - lngWeekday
  End If
  
  GetLastFriday = DateAdd("d", -lngDiff, datLastDate)
  Exit Function
Err_Handler:
  MsgBox "GetLastFriday Error:" & Err.Description

End Function

点评

站长的这个GUID: 72179DB9-4BBD-.... 编码:023458是做什么用的?  发表于 2016-9-30 16:56
4#
发表于 2016-9-29 23:39:44 | 只看该作者
  1. Public Function GD(mDate As Date, W As Integer) As Date
  2.     Dim LastDateOfMonth As Date
  3.     Dim i As Integer
  4.     LastDateOfMonth = DateAdd("m", 1, DateSerial(Year(mDate), Month(mDate), 1)) - 1
  5.     For i = 0 To 6
  6.         If Weekday(LastDateOfMonth - i, vbMonday) = W Then
  7.             GD = LastDateOfMonth - i
  8.             Exit For
  9.         End If
  10.     Next
  11. End Function
复制代码

评分

参与人数 1经验 +6 收起 理由
tmtony + 6 (V币)优秀原创教程、管理建议(1-5分)

查看全部评分

5#
发表于 2016-9-30 00:11:46 | 只看该作者

测试结果

本帖子中包含更多资源

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

x

点击这里给我发消息

6#
发表于 2016-9-30 09:44:40 | 只看该作者
7#
 楼主| 发表于 2016-9-30 16:16:59 | 只看该作者
谢谢各位高手的关注!!!
如果想知道每月最后一个工作日,如何做啊?
8#
发表于 2016-9-30 17:11:10 | 只看该作者
sxgaobo 发表于 2016-9-30 16:16
谢谢各位高手的关注!!!
如果想知道每月最后一个工作日,如何做啊?

节日放假你想如何计算,跟国家一样吗?
国家可是随机拼成长短假期的.
9#
 楼主| 发表于 2016-9-30 20:52:53 | 只看该作者
Henry D. Sy 发表于 2016-9-30 17:11
节日放假你想如何计算,跟国家一样吗?
国家可是随机拼成长短假期的.

节假日人工干预,其他由电脑判断!
10#
发表于 2016-9-30 21:37:23 | 只看该作者
sxgaobo 发表于 2016-9-30 20:52
节假日人工干预,其他由电脑判断!

不考虑节日,那就简单了.
  1. Public Function GetWorkDay(mDate As Date) As Date
  2.     Dim LastDateOfMonth As Date
  3.     LastDateOfMonth = DateAdd("m", 1, DateSerial(Year(mDate), Month(mDate), 1)) - 1
  4.     Select Case Weekday(LastDateOfMonth, vbMonday)
  5.     Case 7
  6.         GetWorkDay = LastDateOfMonth - 2
  7.     Case 6
  8.         GetWorkDay = LastDateOfMonth - 1
  9.     Case Else
  10.         GetWorkDay = LastDateOfMonth
  11.     End Select
  12. End Function
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-2 03:37 , Processed in 0.094008 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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