// 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
}