【问题标题】:How to get total day count in a month如何获得一个月的总天数
【发布时间】:2012-01-03 11:51:51
【问题描述】:

我想按天查找每个月的总天数。

举例

月份是'01/2011' (mm/yyyy)

Expected Output

Sunday - 5
Monday - 5
Tuesday - 5
Wednesday - 4
Thursday - 4
Friday - 4
Saturday - 4

尝试过的代码

Dim lngCnt As Long
    Dim strOut As String
    dtStart = DateValue('01/2012')
    dtEnd = DateAdd("d", DateDiff("d", '01/2012', DateAdd("m", 1, '01/2012') - 1), dtStart)
    lngCnt = Weekday(dtStart) - 3
    Do
        lngCnt = lngCnt + 3
        strOut = strOut & Format(lngCnt, "00") & ","
    Loop While lngCnt + 3 <= dtEnd - dtStart

上面的代码会给出Wednesday = 4, 11, 18, 25的结果

但我想要wednesday = 4'like this 的总数

如何在vb6中完成

需要 VB6 代码帮助

【问题讨论】:

  • 到目前为止您尝试过什么?什么有效?什么没有?如何以及为什么它不起作用? “这里分配,你发送代码”在这里被认为是不礼貌的。
  • @ThePower:请参阅我之前的评论,我认为我在那里已经足够明确了。 “这是我的任务,我需要 ThisOrThatLanguage 中的代码,除了复制粘贴到这里,我什么都没试过,停!”不是请求帮助 - 它更像是“为我做我的工作,kthxbai”。至于你,“这是一个遗憾的投票”也不是很有帮助。
  • @Piskvor,先生。现在我添加了代码,我尝试过的......
  • @Piskvor - 几乎没有什么赞成票。我认为这是一个很好的问题。您还声称引用他强调这是一项任务,这是错误的。
  • Gopal,这是我来自 stackoverflow.com/q/8698963/641067 的代码,你还没有关闭它。

标签: count vb6 days


【解决方案1】:

这是一个你可以调用的函数

它需要两个参数(年和月)并返回一个数组(1 到 7),表示该月的星期日到星期六的天数

Function Days(yr As Long, mn As Long) As Variant
    Dim First As Date
    Dim FirstDay As Long
    Dim DaysInMonth As Long
    Dim DayCount(1 To 7) As Long
    Dim i As Long

    DayCount(1) = 4
    DayCount(2) = 4
    DayCount(3) = 4
    DayCount(4) = 4
    DayCount(5) = 4
    DayCount(6) = 4
    DayCount(7) = 4

    First = DateSerial(yr, mn, 1)
    DaysInMonth = DateSerial(yr, mn + 1, 1) - First
    FirstDay = Weekday(First)
    For i = FirstDay To DaysInMonth + FirstDay - 28 - 1
        DayCount((i - 1) Mod 7 + 1) = 5
    Next

    Days = DayCount
End Function

更新:

要使用它来获取一个月中的星期五数,请使用

Fridays = Days(2012, 2)(6)  ' For Fridays in Fedruary 2012

更新 2:

听取 Brettdj 的建议

要返回像“Fridays = 4”这样的字符串,请使用

Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")(6) & " = " & Days(2012, 2)(6)

【讨论】:

  • 很好.. 花了我一点时间弄清楚为什么你将它们默认为 4.. :p
  • 我应该添加这个来解决问题。您可能需要向 Gopal 展示如何调用该函数并为他添加日期名称。 FWIW,您可能对我最近看到 Rory Archibald 使用值 Dim DayCount DayCount = Application.Transpose(Application.Evaluate("if(row(A1:A7),4,0)")) 将在上面的示例中填写 DayCount 的数组进行预填充的可爱技巧感兴趣
【解决方案2】:

更新答案 更新您的评论以返回任一

  1. 一个月中的天数仅限一天(在 Msgbox 提示符下按 Yes),或
  2. 一周中的每一天(在 Msgbox 提示符下按 No)。

    Sub GetDay()  
    Dim strMonth As String  
    Dim strOut As String  
    Dim lngDay As Long  
    Dim lngCheck As Long  
    
    strMonth = "01/2012"
    
    lngCheck = MsgBox("Press Yes to run single day" & vbNewLine & "Press No to run the entire week", vbYesNoCancel, "User choice")
    
    If lngCheck = vbCancel Then Exit Sub
    
    If lngCheck = vbYes Then
    'Option 1 one day
    lngDay = vbFriday
    strOut = strOut & DaysInMonth(lngDay, strMonth) & vbNewLine
    Else
    'Option 2 all days
    For lngDay = vbSunday To vbSaturday
    strOut = strOut & DaysInMonth(lngDay, strMonth) & vbNewLine
    Next
    End If
    
    MsgBox strOut
    End Sub
    
    Function DaysInMonth(ByVal lngDay, ByVal strMonth)
    Dim dtStart As Date
    Dim dtEnd As Date
    Dim dtTest As Date
    Dim lngCnt As Long
    Dim i As Long
    
    dtStart = DateValue(strMonth)
    dtEnd = DateAdd("d", DateDiff("d", strMonth, DateAdd("m", 1, strMonth) - 1), dtStart)
    lngCnt = (dtEnd - dtStart + 1)
    
    DaysInMonth = WeekdayName(lngDay, , vbSunday) & " - 4"
    
    For i = 1 To lngCnt Mod 7
    If Weekday(DateAdd("d", i - 1, dtStart)) = lngDay Then
     DaysInMonth = WeekdayName(lngDay, , vbSunday) & " - 5"
    Exit For
    End If
    Next
    
    End Function
    

【讨论】:

  • 非常感谢您的回复,现在您的代码显示 7 天,如果我只需要星期五计数方式,例如 friday - 5。请您帮帮我,如何修改您的相应的代码......
  • @gopal 按要求更新。请在未来保持您的问题范围狭窄
  • 输出错误,当我选择'01/2012'时,它给出了friday - 5,它应该给出friday - 4,因为当月只有4个friday可用,你能检查一下吗你的代码请.....
  • @gopal 现在应该没问题了。虽然它最初在我的测试中有效,但在那个特定月份是侥幸
猜你喜欢
  • 2020-02-13
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
相关资源
最近更新 更多