UiBot计算某天位于当月的第几周-算法

方法描述:

  1. 设某天为x,获取x位于日历中的第几天。
  2. 用获取到的第几天天数除以7,得到小数形式的值。
  3. 使用小数形式的值获取第几周数,取出小数部分,若小数部分等于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行。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值