GO根据开始日期和结束日期,返回键是年份和周次,值是表示该周起始日期和结束日期的字符串切片


// getWeekDatesMap 函数根据给定的开始日期和结束日期,返回一个映射,其中键是年份和周次,值是表示该周起始日期和结束日期的字符串切片。
//
// 参数:
// startDate: string - 开始日期,格式为"YYYYMMDD"。
// endDate: string - 结束日期,格式为"YYYYMMDD"。
//
// 返回值:
// map[string][]string - 一个映射,键为"年份第周次"格式的字符串,值为表示该周起始日期和结束日期的字符串切片。
func GetWeekDatesMap(startDate, endDate string) map[string][]string {
	layout := "20060102"
	startDateTime, _ := time.Parse(layout, startDate)
	endDateTime, _ := time.Parse(layout, endDate)

	weekDatesMap := make(map[string][]string)

	// 找到第一个完整的周的起始日期
	weekday := int(startDateTime.Weekday())
	if weekday == 0 {
		weekday = 7
	}
	// fmt.Println(weekday)
	startDateTime = startDateTime.AddDate(0, 0, -weekday+1)
	// fmt.Println(startDateTime.Format(layout))
	// 循环遍历日期范围,生成每周的日期范围
	for startDateTime.Before(endDateTime.AddDate(0, 0, 1)) {
		weekStart := startDateTime
		weekEnd := startDateTime.AddDate(0, 0, 6)

		// 如果周结束日期超过了结束日期,则修正为结束日期
		if weekEnd.After(endDateTime) {
			weekEnd = endDateTime
		}

		// 获取周的开始和结束日期所在的年和周次
		// year, week := weekStart.ISOWeek()
		key := fmt.Sprintf("%s~%s", weekStart.Format("20060102"), weekEnd.Format("20060102"))

		// 将每周的开始和结束日期存入map中
		weekDatesMap[key] = []string{weekStart.Format(layout), weekEnd.Format(layout)}

		// 更新下一个周的起始日期
		startDateTime = weekEnd.AddDate(0, 0, 1)
	}
	return weekDatesMap
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值