Office中国论坛/Access中国论坛
标题: 如何能确定能确定出一个日期是本月内第几周的周几呢 [打印本页]
作者: caoybh 时间: 2006-6-13 19:02
标题: 如何能确定能确定出一个日期是本月内第几周的周几呢
在输入一个日期后,如何能确定能确定出该日期是本月内第几周的周几呢,(例如2006年6月2日,怎么判断为6月第一周的周五呢) 谢谢大家给点意见
作者: andymark 时间: 2006-6-13 19:37
Dim MyDate
MyDate = #6/13/2006#
MsgBox MyDate & " 是第 " & DatePart("w", MyDate) & " 周 " & WeekdayName(Weekday(MyDate), True)
具体参考:
http://www.office-cn.net/forum.php?mod=viewthread&tid=33813&replyID=&skin=1
作者: caoybh 时间: 2006-6-13 20:33
谢谢andymark
作者: Benjamin_luk 时间: 2006-6-13 21:27
周日到周六算一周,还是周一到周日算一周呢?[em01]
作者: Benjamin_luk 时间: 2006-6-13 22:30
2楼取得的是本周内的第几天吧.
作者: andymark 时间: 2006-6-13 22:42
以下是引用Benjamin_luk在2006-6-13 14:30:00的发言:
2楼取得的是本周内的第几天吧.
返回的是星期几 ,具体可以参考weekdayname函数。
作者: caoybh 时间: 2006-6-14 00:17
<COLGROUP>
<COL style="WIDTH: 643pt; mso-width-source: userset; mso-width-alt: 27424" width=857>
还是有点疑问,用andymark大侠的这段语句,为什么2006-06-14日显示是第“4”周呢,而不是这个月的第“3”周呢,而2006-06-13日却显示为第“3”周,相差了一天,却相差了一周,小弟愚钝,望大侠指点一二 :p
作者: wu8313 时间: 2006-6-14 03:01
如果你认为下图中的日期为 第二周 的话,试试这些代码:
[attach]18475[/attach]
Option Compare Database
Dim c As Integer
Dim d As Date
Sub get_weekcount_weekday()
Dim a As Integer
Dim b As Date
On Error GoTo inputbox_Err
d = InputBox("形如2000-01-01", "输入日期")
a = Month(d)
Select Case a
Case 1
b = #1/1/2006#
c = Abs(d - b)
Debug.Print c '距离某月第一天的天数
Case 2
b = #2/1/2006#
c = Abs(d - b)
Case 3
b = #3/1/2006#
c = Abs(d - b)
Case 4
b = #4/1/2006#
c = Abs(d - b)
Case 5
b = #5/1/2006#
c = Abs(d - b)
Case 6
b = #6/1/2006#
c = Abs(d - b)
Case 7
b = #7/1/2006#
c = Abs(d - b)
Case 8
b = #8/1/2006#
c = Abs(d - b)
Case 9
b = #9/1/2006#
c = Abs(d - b)
Case 10
b = #10/1/2006#
c = Abs(d - b)
Case 11
b = #11/1/2006#
c = Abs(d - b)
Case 12
b = #12/1/2006#
c = Abs(d - b)
End Select
Call weekcount
inputbox_Exit:
Exit Sub
inputbox_Err:
'MsgBox Error$
MsgBox "1、您输入的日期格式错误" & vbCr & "" & vbCr & "2、或者取消了日期输入", vbInformation, "日期输入提示..."
Resume inputbox_Exit
Exit Sub
End Sub
Sub weekcount()
Select Case c
Case 0, 1, 2, 3, 4, 5
MsgBox "第一周"
MsgBox "星期" & Weekday(d, vbMonday) '把每周一作为每周的第一天
Case 6, 7, 8, 9, 10, 11
MsgBox "第二周"
MsgBox "星期" & Weekday(d, vbMonday)
Case 12, 13, 14, 15, 16, 17
MsgBox "第三周"
MsgBox "星期" & Weekday(d, vbMonday)
Case Is > 18
MsgBox "第四周"
MsgBox "星期" & Weekday(d, vbMonday)
End Select
end sub
调用:call get_weekcount_weekday()
上述代码计算 2006-06-14 为第三周,注意只能计算2006年度。写得更通用一点,我无力完成。
[此贴子已经被作者于2006-6-13 19:49:54编辑过]
作者: wu8313 时间: 2006-6-14 03:57
才发现,楼主的逻辑是 2006-06-14 为第三周,我的代码太繁琐,
get_weekcount_weekday() 这个过程完全可以省略,直接根据 输入的日期day返回值就可以判断了。也就可以写得更通用一些了。
[此贴子已经被作者于2006-6-13 20:00:10编辑过]
作者: fan0217 时间: 2006-6-14 04:10
以下是引用Benjamin_luk在2006-6-13 13:27:00的发言:
周日到周六算一周,还是周一到周日算一周呢?[em01]
这个问题东西方有差异,西方周日是第一天,我们普遍认为的是周一是第一天。
作者: fan0217 时间: 2006-6-14 04:13
format(data(),“aaaa”)
用这个直接方法得出是星期几。
作者: andymark 时间: 2006-6-14 05:48
编了个函数,没完全测试,按星期一到星期天为一个星期
Private Sub Form_Load()
Dim MyDate
MyDate = #6/30/2006#
MsgBox MyWeek(MyDate)
End Sub
Function MyWeek(MyDay) As Integer
Dim FirstWeek As Integer
Dim IntWeek As Integer
Dim TotalWeek As Integer
FirstWeek = Weekday(CDate(Format(MyDay, "yyyy-mm-1")), vbMonday)
If FirstWeek = 7 Then
IntWeek = 1
Else
If (7 - FirstWeek) > 0 Then
IntWeek = 1
Else
IntWeek = 0
End If
End If
If (Format(MyDay, "d") - 1) >= 7 - FirstWeek Then
If (Format(MyDay, "d") - FirstWeek) Mod 7 = 0 Then
TotalWeek = Fix((Format(MyDay, "d") - FirstWeek) / 7) + IntWeek
Else
TotalWeek = Fix((Format(MyDay, "d") - FirstWeek) / 7) + IntWeek + 1
End If
Else
TotalWeek = 1
End If
MyWeek = TotalWeek
End Function
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) |
Powered by Discuz! X3.3 |