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