sprechstunden-go/models/date.go

66 lines
1.4 KiB
Go

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
}