func inTimeSpan(start, end, check time.Time) bool {
if check.After(end) {
return false
}
if end.After(start) {
return check.After(start)
}
return check.Before(start)
}
Проверьте это на детской площадке https://play.golang.org/p/ISFpxzIjvY_L
package main
import (
"fmt"
"time"
)
func inTimeSpan(start, end, check time.Time) bool {
if check.After(end) {
return false
}
if end.After(start) {
return check.After(start)
}
return check.Before(start)
}
func main() {
test := []struct {
start string
end string
check string
}{
{"23:00", "05:00", "04:00"},
{"23:00", "05:00", "23:30"},
{"23:00", "05:00", "20:00"},
{"10:00", "21:00", "11:00"},
{"10:00", "21:00", "22:00"},
{"10:00", "21:00", "03:00"},
}
newLayout := "15:04"
for _, t := range test {
check, _ := time.Parse(newLayout, t.check)
start, _ := time.Parse(newLayout, t.start)
end, _ := time.Parse(newLayout, t.end)
fmt.Println(t.start+"-"+t.end, t.check, inTimeSpan(start, end, check))
}
}
Результат:
23:00-05:00 04:00 true
23:00-05:00 23:30 false
23:00-05:00 20:00 false
10:00-21:00 11:00 true
10:00-21:00 22:00 false
10:00-21:00 03:00 false