Ce face time.Time.Sub
t.Sub(u) returnează t - u, adică durata de la u până la t. Dacă t este înainte de u, rezultatul este negativ.
Rezultatul este un time.Duration, pe care îl poți afișa direct (2h30m0s) sau îl poți transforma în ore, minute sau secunde cu Hours(), Minutes(), Seconds().
Pentru „cât a trecut de atunci până acum” există scurtătura time.Since(t), echivalentă cu time.Now().Sub(t), iar pentru „cât mai e până atunci” time.Until(t).
Parametri
| Parametru | Descriere |
|---|---|
u |
Momentul scăzut din t. |
Ce returnează
Un time.Duration. Dacă diferența depășește aproximativ 292 de ani, rezultatul este limitat la valoarea maximă (sau minimă).
Exemple
Exemplul 1: Durata unei ture și zilele până la un termen
package main
import (
"fmt"
"time"
)
func main() {
intrare := time.Date(2026, time.October, 19, 8, 45, 0, 0, time.UTC)
iesire := time.Date(2026, time.October, 19, 17, 15, 0, 0, time.UTC)
tura := iesire.Sub(intrare)
fmt.Println("Tura a durat:", tura)
fmt.Printf("Adică %.1f ore\n", tura.Hours())
azi := time.Date(2026, time.October, 19, 0, 0, 0, 0, time.UTC)
craciun := time.Date(2026, time.December, 25, 0, 0, 0, 0, time.UTC)
zile := int(craciun.Sub(azi).Hours() / 24)
fmt.Println("Zile până la Crăciun:", zile)
fmt.Println("Invers (negativ):", azi.Sub(craciun))
}
Rezultat
Tura a durat: 8h30m0s
Adică 8.5 ore
Zile până la Crăciun: 67
Invers (negativ): -1608h0m0s
Exemplul 2: Cât a durat o operație (time.Since)
Măsurarea depinde de calculator, deci rezultatul diferă la fiecare rulare.
package main
import (
"fmt"
"time"
)
func main() {
start := time.Now()
suma := 0
for i := range 50_000_000 {
suma += i
}
fmt.Println("Suma:", suma)
fmt.Println("Durată:", time.Since(start))
}
Rezultat posibil (diferă la fiecare rulare)
Suma: 1249999975000000
Durată: 14.218375ms
Greșeli frecvente
- Scazi momente cu
-:iesire - intrarenu compilează. Foloseșteiesire.Sub(intrare). - Calculezi zilele cu
Hours()/24între date din fusuri cu oră de vară: o zi poate avea 23 sau 25 de ore. Pentru zile de calendar, lucrează în UTC sau compară datele (Date()).
Comenzi înrudite
time.Time.Add: Returnează momentul mutat înainte (sau înapoi, cu durată negativă) cu o durată exactă: ore, minute, secunde.time.Since: Since: cât timp a trecut de la t până acum; Until: cât timp mai este până la t. Ambele returnează time.Duration.time.Duration: Tipul pentru o durată, păstrată în nanosecunde; se scrie ca 90*time.Minute și se afișează ca „1h30m0s”.time.Duration.Hours: Transformă o durată în număr de ore, minute sau secunde (float64) ori milisecunde (int64).time.Time.Before: Before, After și Equal compară două momente: este t înainte, după sau exact în același moment cu u?