我正在尝试使用asp classic来查找当月有多少个工作日(mon-sat)以及剩下多少个工作日。
任何帮助或指针非常感谢!
答案 0 :(得分:2)
以下是如何在没有迭代的情况下找到一个月内的星期日数。有人在几个月前发布了一个JavaScript解决方案并将其移植到VBScript:
Function GetSundaysInMonth(intMonth, intYear)
dtmStart = DateSerial(intYear, intMonth, 1)
intDays = Day(DateAdd("m", 1, dtmStart) - 1)
GetSundaysInMonth = Int((intDays + (Weekday(dtmStart) + 5) Mod 7) / 7)
End Function
因此,您的总工作日数只是该月的天数减去星期日的数量。
修改强>
正如@Lankymart在评论中指出的那样,上面的函数给出了月中星期日的数量,但它并没有告诉你剩下多少星期日。
这是另一个版本。通过任何日期,它会告诉你从该日期开始的月份中剩下多少个星期日。如果您想知道完整月中有多少个星期日,请在该月的第一天传递(例如DateSerial(2014, 8, 1)
)。
Function GetSundaysRemainingInMonth(dtmStart)
intDays = Day(DateSerial(Year(dtmStart), Month(dtmStart) + 1, 1) - 1)
intDays = intDays - Day(dtmStart) + 1
GetSundaysRemainingInMonth = Int((intDays + (Weekday(dtmStart) + 5) Mod 7) / 7)
End Function
编辑2:
@Cheran Shunmugavel对一些有关其工作原理的细节感兴趣。首先,我只想重申,我最初并没有开发出这种方法。我把它移植到VBScript并根据OP的要求(周日)进行了调整。
想象一下闰年的二月。我们这个月有29天。我们从一开始就知道我们有四个星期,所以每个工作日至少会有四次。但是,这仍然是一个额外的日子(29 Mod 7 = 1
)下落不明。我们如何知道我们是否从那一天获得额外的星期天?嗯,在这种情况下,它非常简单。只有我们的开始日期是星期日,我们才能计算一个月的额外星期日。
如果这个月有30天怎么办?然后我们还有两天需要考虑。在这种情况下,开始日期可以是星期六或星期日,我们可以计算该月的额外星期日。它就这样了。所以我们可以看到,如果我们在即将到来的星期天再过X天,我们就可以计算一个额外的星期天。
让我们以表格形式表达:
Addl Days Needed
Day To Count Sunday
---------- ----------------
Sunday 1
Saturday 2
Friday 3
Thursday 4
Wednesday 5
Tuesday 6
Monday 7
所以我们需要的是一个公式,我们可以应用于这些情况,以便它们都能产生相同的值。我们需要为每天分配一些值,并将该值与星期日计算所需的额外天数相结合。似乎合理的是,如果我们将逆值分配给工作日并将其添加到额外天数,我们可以得到相同的结果。
Addl Days Needed Value Assigned
Day To Count Sunday To Weekday Sum
---------- ---------------- -------------- ---
Sunday 1 6 7
Saturday 2 5 7
Friday 3 4 7
Thursday 4 3 7
Wednesday 5 2 7
Tuesday 6 1 7
Monday 7 0 7
所以,如果weekday_value + addl_days = 7
那么我们就算一个额外的星期天。 (我们稍后将其除以7,以便给我们 1 额外的星期日)。但是我们如何在工作日分配我们想要的值呢?好吧,VBScript的Weekday()
功能已经做到了这一点,但遗憾的是,它并没有默认使用我们需要的值(它在星期六使用1代表星期日到7代)。我们可以使用第二个参数更改Weekday()
的工作方式,或者我们可以使用Mod()
。这就是+ 5 Mod 7
的用武之地。如果我们取Weekday()
值并加5,然后按7修改,我们得到我们需要的值。
Day Weekday() +5 Mod 7
---------- --------- -- -----
Sunday 1 6 6
Saturday 7 12 5
Friday 6 11 4
Thursday 5 10 3
Wednesday 4 9 2
Tuesday 3 8 1
Monday 2 7 0
+ 5 Mod 7
是如何确定的。并且,解决了这个问题,其余的很容易(呃)!
答案 1 :(得分:0)
@Zam on the right track您需要使用WeekDay()
函数,以下是编写脚本的基本概念;
<%
Dim month_start, month_end, currentdate, dayofmonth
Dim num_weekdays, num_past, num_future
Dim msg
'This can be configured how you like even use Date().
month_start = CDate("01/08/2014")
month_end = DateAdd("d", -1, DateAdd("m", 1, month_start))
msgbox(Day(month_end))
For dayofmonth = 1 To Day(month_end)
currentdate = CDate(DateAdd("d", dayofmonth, month_start))
'Only ignore Sundays
If WeekDay(currentdate) <> vbSunday Then
num_weekdays = num_weekdays + 1
If currentdate <= Date() Then
num_past = num_past + 1
Else
num_future = num_future + 1
End If
End If
Next
msg = ""
msg = msg & "Start: " & month_start & "<br />"
msg = msg & "End: " & month_end & "<br />"
msg = msg & "Number of Weekdays: " & num_weekdays & "<br />"
msg = msg & "Weekdays Past: " & num_past & "<br />"
msg = msg & "Weekdays Future: " & num_future & "<br />"
Response.Write msg
%>
答案 2 :(得分:-1)
如何使用“工作日函数返回1到7之间的数字,表示星期几。” ?