|
@@ -1230,40 +1230,40 @@ func GetCurrentTime() string {
|
|
|
// 规则:某年的第一个周五所在周为该年的第一周
|
|
|
// 返回:格式化字符串(如"202504")、周数(如4)和所在周的周五日期
|
|
|
func GetAssessmentWeekAndFriday(t time.Time) (string, int, time.Time) {
|
|
|
- year := t.Year()
|
|
|
-
|
|
|
- // 找到该年第一个周五的日期
|
|
|
- firstFriday := findFirstFriday(year)
|
|
|
-
|
|
|
- // 计算当前日期与该年第一个周五所在周的第一天(周一)的天数差
|
|
|
- daysSinceFirstWeek := t.YearDay() - firstFriday.YearDay() + int(firstFriday.Weekday()) - int(time.Monday)
|
|
|
-
|
|
|
- weekNum := 1
|
|
|
- if daysSinceFirstWeek > 0 {
|
|
|
- weekNum += daysSinceFirstWeek / 7
|
|
|
- if daysSinceFirstWeek%7 != 0 {
|
|
|
- weekNum++
|
|
|
+ baseYear, baseWeek := t.ISOWeek()
|
|
|
+ //fmt.Println(t.Format(FormatDate), " ", baseYear, baseWeek)
|
|
|
+
|
|
|
+ firstDay := time.Date(t.Year(), 1, 1, 0, 0, 0, 0, time.Local)
|
|
|
+ // 如果该年的第1天是周五,那么需要额外处理
|
|
|
+ if firstDay.Weekday() == 5 {
|
|
|
+ // 如果基准年份跟第1天的年份不一致,那么说明是第1周,可是基准拿到的数据是上一年的最后一周,所以需要强制调整为今年的第1周
|
|
|
+ if baseYear != firstDay.Year() {
|
|
|
+ baseYear++
|
|
|
+ baseWeek = 1
|
|
|
+ } else {
|
|
|
+ // 如果基准年份跟第1天的年份一致,那么说明不是第1周,可是基准拿到的周度数据会少1周,所以需要强制加1周
|
|
|
+ baseWeek++
|
|
|
}
|
|
|
- } else {
|
|
|
- // 如果当前日期在第一个周五所在周之前,则属于上一年的最后一周
|
|
|
- prevYear := year - 1
|
|
|
- prevFirstFriday := findFirstFriday(prevYear)
|
|
|
- daysInPrevYear := daysInYear(prevYear)
|
|
|
-
|
|
|
- daysSincePrevFirstWeek := t.YearDay() + (daysInPrevYear - prevFirstFriday.YearDay()) + int(prevFirstFriday.Weekday()) - int(time.Monday)
|
|
|
- weekNum = daysSincePrevFirstWeek / 7
|
|
|
- if daysSincePrevFirstWeek%7 != 0 {
|
|
|
- weekNum++
|
|
|
+ }
|
|
|
+
|
|
|
+ lastDay := time.Date(t.Year(), 12, 31, 0, 0, 0, 0, time.Local)
|
|
|
+ // 如果该年的最后1天是周4,那么需要额外处理
|
|
|
+ if lastDay.Weekday() == 4 {
|
|
|
+ _, lastWeek := lastDay.ISOWeek()
|
|
|
+ // 如果基准周度数跟最后1天的周度数不一致,那么说明是明年的第1周,可是基准拿到的数据是今年的最后一周,所以需要强制调整为明年年的第1周
|
|
|
+ if baseWeek == lastWeek {
|
|
|
+ baseYear++
|
|
|
+ baseWeek = 1
|
|
|
}
|
|
|
- year = prevYear
|
|
|
}
|
|
|
|
|
|
// 计算当前日期所在周的周五
|
|
|
currentWeekFriday := findFridayOfWeek(t)
|
|
|
|
|
|
// 格式化输出
|
|
|
- formatted := fmt.Sprintf("%04d%02d", year, weekNum)
|
|
|
- return formatted, weekNum, currentWeekFriday
|
|
|
+ formatted := fmt.Sprintf("%04d%02d", baseYear, baseWeek)
|
|
|
+ //fmt.Println(t.Format(FormatDate), " ", formatted, "周五的日期:", currentWeekFriday.Format(FormatDate))
|
|
|
+ return formatted, baseWeek, currentWeekFriday
|
|
|
}
|
|
|
|
|
|
// findFirstFriday 找到某年的第一个周五
|