package date import "time" func GetDateFromWeekNumber(year int, weekNumber int, dayName string) (time.Time, error) { // Create a time.Date for the first day of the year firstDayOfYear := time.Date(year, time.January, 1, 0, 0, 0, 0, time.UTC) // Calculate the number of days to add to reach the desired week daysToAdd := time.Duration((weekNumber-1)*7) * 24 * time.Hour // Find the starting day of the week (e.g., Monday) startingDayOfWeek := firstDayOfYear // check if the first day of the year is friday or saturday or sunday if startingDayOfWeek.Weekday() == time.Friday || startingDayOfWeek.Weekday() == time.Saturday || startingDayOfWeek.Weekday() == time.Sunday { for startingDayOfWeek.Weekday() != time.Monday { startingDayOfWeek = startingDayOfWeek.Add(24 * time.Hour) } } else { for startingDayOfWeek.Weekday() != time.Monday { startingDayOfWeek = startingDayOfWeek.Add(-24 * time.Hour) } } // Calculate the desired date by adding daysToAdd and adjusting for the day name desiredDate := startingDayOfWeek.Add(daysToAdd) // Find the day of the week dayOfWeek := map[string]time.Weekday{ "Montag": time.Monday, "Dienstag": time.Tuesday, "Mittwoch": time.Wednesday, "Donnerstag": time.Thursday, "Freitag": time.Friday, "Samstag": time.Saturday, "Sonntag": time.Sunday, }[dayName] // Adjust to the desired day of the week for desiredDate.Weekday() != dayOfWeek { desiredDate = desiredDate.Add(24 * time.Hour) } return desiredDate, nil }