gob/datetime/compare.go

79 lines
1.7 KiB
Go

package datetime
import (
"time"
"golang.org/x/tools/go/analysis/passes/bools"
)
// IsZero retourne vrai si la date représente le 01/01/0001 à 00:00 UTC.
func IsZero(t time.Time) bool {
return t.IsZero()
}
// Compare retourne :
// - 1 si t1 est dans le futur de t2,
// - 0 si t1 et t2 sont égaux,
// - -1 sinon.
func Compare(t1, t2 time.Time) int {
u1, u2 := t1.Unix(), t2.Unix()
switch {
case u1 == u2:
return 0
case u1 > u2:
return 1
default:
return -1
}
}
// Eq retourne vrai si t1 = t2.
func Eq(t1, t2 time.Time) bool { return Compare(t1, t2) == 0 }
// Ne retourne vrai si t1 ≠ t2.
func Ne(t1, t2 time.Time) bool { return Compare(t1, t2) != 0 }
// Gt retourne vrai si t1 > t2.
func Gt(t1, t2 time.Time) bool { return Compare(t1, t2) > 0 }
// Ge retourne vrai si t1 ≥ t2.
func Ge(t1, t2 time.Time) bool { return Compare(t1, t2) >= 0 }
// Lt retourne vrai si t1 < t2.
func Lt(t1, t2 time.Time) bool { return Compare(t1, t2) < 0 }
// Le retourne vrai si t1 ≤ t2.
func Le(t1, t2 time.Time) bool { return Compare(t1, t2) <= 0 }
// Min retourne la date la plus située dans le passé.
func Min(t time.Time, times ...time.Time) time.Time {
for _, tt := range times {
if Lt(tt, t) {
t = tt
}
}
return t
}
// Max retourne la date la plus située dans le futur.
func Max(t time.Time, times ...time.Time) time.Time {
for _, tt := range times {
if Gt(tt, t) {
t = tt
}
}
return t
}
// IsNow retourne vrai si la date est actuelle.
func IsNow(t time.Time) bool { return Eq(t, time.Now()) }
// IsPast retourne vrai si la date est située dans le passé.
func IsPast(t time.Time) bool { return Lt(t, time.Now()) }
// IsFuture retourne vrai si la date est située dans le future.
func IsFuture(t time.Time) bool { return Gt(t, time.Now()) }