方法描述:
- 设某天为x,获取x位于日历中的第几天。
- 用获取到的第几天天数除以7,得到小数形式的值。
- 使用小数形式的值获取第几周数,取出小数部分,若小数部分等于0则其整数部分即为第几周的周数;若小数部分不等于0(大于0),则将整数部分+1即为第几周的周数。
UiBot实现步骤:
步骤分为周日为第一天的情况和周一为第一天的情况,这两种情况仅第一步不同。
1. 周日为第一天:
// 形参为时间类型浮点数值
Function DateRowSite(departDate)
Dim firstDay = ""
Dim firstDayWeekDay = ""
// 获取当月第一天的浮点数值
firstDay = Time.DateSerial(Time.Year(departDate), Time.Month(departDate), 1)
// 获取当月第一天是本周的第几天
firstDayWeekDay = Time.WeekDay(firstDay)
// 获取某天的日数(仅为从时间类型的浮点数值中抽取出天数,即某天为2022年3月12日时,仅抽取出12,不做任何修改)
departDateDay = Time.DatePart("d", departDate)
// (日期天数+(当月第一天所在的本周的第几天-1))=要计算的某天在本月日历中所在第几天
// 因为当月第一天所在的周几包含第一天,所以需要减1
WeeksFloat = (departDateDay + (firstDayWeekDay - 1)) / 7
// 获取小数部分
If Split(CStr(WeeksFloat),".")[1] = "0"
Return Split(CStr(WeeksFloat),".")[0]
Else
Return CStr(CInt(Split(CStr(WeeksFloat),".")[0]) + 1)
End If
End Function
注:因为周日为第一天情况时,因自带的时间函数是以周日为第一天,所以不用特别修改。
2. 周一为第一天:
// 形参为时间类型浮点数值
Function DateRowSite(departDate)
Dim firstDay = ""
Dim firstDayWeekDay = ""
firstDay = Time.DateSerial(Time.Year(departDate), Time.Month(departDate), 1)
firstDayWeekDay = Time.WeekDay(firstDay)
departDateDay = Time.DatePart("d", departDate)
// 此处判断作用是,若当月第一天为周日,由于自带函数的原因会返回1,但日历中由于周一是第一天则应该使用第7天
If firstDayWeekDay = 1
// 因为需要不包含周日则需要将值再加1
firstDayWeekDay = 8
End If
// 因为日历计算时以周一为第一天,但自带函数却已周日为第一天所以需要多减1
WeeksFloat = (departDateDay + (firstDayWeekDay - 2)) / 7
// 获取小数部分
If Split(CStr(WeeksFloat),".")[1] = "0"
Return Split(CStr(WeeksFloat),".")[0]
Else
Return CStr(CInt(Split(CStr(WeeksFloat),".")[0]) + 1)
End If
End Function
注:与周日为第一天有两个地方不同,即9-12行和第14行。