package models import ( "log" ) type Date struct { Week int // Set whether the date is all weeks (0), odd weeks (1) or even weeks (2). Day int Hour int Minute int } // Return the name of the day for a given integer. func DayName(day int) string { switch day { case 0: return "Montag" case 1: return "Dienstag" case 2: return "Mittwoch" case 3: return "Donnerstag" case 4: return "Freitag" default: log.Printf("No day name found for day %d", day) return "" } } // Compare whether first date is strictly before second date. func DateLess(first Date, second Date) bool { if first.Day < second.Day { return true } else if first.Day > second.Day { return false } if first.Hour < second.Hour { return true } else if first.Hour > second.Hour { return false } if first.Minute < second.Minute { return true } else if first.Minute > second.Minute { return false } return false } // Get the end date for some duration. func GetEndDate(date Date, duration int, ignoreWeek bool) Date { var endDate Date if ignoreWeek { endDate = Date{0, date.Day, date.Hour, date.Minute} // deep copy } else { endDate = Date{date.Week, date.Day, date.Hour, date.Minute} } endDate.Day = (endDate.Day + (endDate.Hour*60+endDate.Minute+duration)/(60*24)) % 7 endDate.Hour = (endDate.Hour + (endDate.Minute+duration)/60) % 24 endDate.Minute = (endDate.Minute + duration) % 60 return endDate }