Ce face time.Time.Before
t.Before(u) este true dacă t este strict înainte de u, t.After(u) dacă este strict după, iar t.Equal(u) dacă reprezintă același moment.
Equal compară momentul, nu felul în care este scris: 14:30 la București (UTC+3) și 11:30 UTC sunt același moment, deci Equal dă true. Operatorul == compară și fusul orar (și citirea internă a ceasului monoton) și poate da false pentru același moment.
Pentru „între două date, inclusiv capetele” scrii !t.Before(start) && !t.After(sfarsit).
Parametri
| Parametru | Descriere |
|---|---|
u |
Momentul cu care compari. |
Ce returnează
bool.
Exemple
Exemplul 1: Termen depășit sau nu
package main
import (
"fmt"
"time"
)
func main() {
termen := time.Date(2026, time.October, 20, 23, 59, 0, 0, time.UTC)
predari := map[string]time.Time{
"Ana": time.Date(2026, time.October, 19, 18, 0, 0, 0, time.UTC),
"Ion": time.Date(2026, time.October, 21, 8, 30, 0, 0, time.UTC),
"Elena": termen,
}
for _, nume := range []string{"Ana", "Ion", "Elena"} {
p := predari[nume]
switch {
case p.Before(termen):
fmt.Println(nume, "a predat la timp")
case p.Equal(termen):
fmt.Println(nume, "a predat chiar la termen")
case p.After(termen):
fmt.Println(nume, "a întârziat")
}
}
}
Rezultat
Ana a predat la timp
Ion a întârziat
Elena a predat chiar la termen
Exemplul 2: Equal față de ==
Același moment, scris în două fusuri orare: Equal spune true, == spune false.
package main
import (
"fmt"
"time"
)
func main() {
ro := time.FixedZone("EEST", 3*60*60)
a := time.Date(2026, time.October, 19, 14, 30, 0, 0, ro)
b := time.Date(2026, time.October, 19, 11, 30, 0, 0, time.UTC)
fmt.Println(a)
fmt.Println(b)
fmt.Println("a.Equal(b):", a.Equal(b))
fmt.Println("a == b: ", a == b)
start := time.Date(2026, 10, 1, 0, 0, 0, 0, time.UTC)
sfarsit := time.Date(2026, 10, 31, 0, 0, 0, 0, time.UTC)
inInterval := !b.Before(start) && !b.After(sfarsit)
fmt.Println("În octombrie:", inInterval)
}
Rezultat
2026-10-19 14:30:00 +0300 EEST
2026-10-19 11:30:00 +0000 UTC
a.Equal(b): true
a == b: false
În octombrie: true
Greșeli frecvente
- Folosești
==sau chei de map de tiptime.Timepentru momente venite din surse diferite. FoloseșteEqualsau normalizează întâi cut.UTC(). - Uiți că
BeforeșiAftersunt stricte: pentru momente egale ambele daufalse.
Comenzi înrudite
time.Time.Compare: Compară două momente și returnează -1, 0 sau +1; potrivită pentru sortarea cu slices.SortFunc.time.Time.Sub: Calculează cât timp a trecut între două momente și returnează diferența ca time.Duration.time.Time.In: Afișează același moment în alt fus orar: In(loc) pentru o zonă anume, UTC() pentru UTC, Local() pentru zona calculatorului.time.Time: Tipul care ține un moment în timp: dată, oră, nanosecunde și fusul orar. Se creează cu time.Date sau time.Now.