Ce face time.Time.Date
t.Date() returnează trei valori: anul, luna (de tip time.Month) și ziua din lună. Este mai eficientă decât trei apeluri separate când ai nevoie de toate.
Year(), Month() și Day() returnează câte o singură componentă. Luna afișată cu fmt apare ca nume englezesc (October); ca număr o obții cu int(t.Month()).
Valorile sunt citite în fusul orar al momentului. Același moment poate cădea în zile diferite la București și la New York.
Ce returnează
Date: (year int, month Month, day int). Year și Day: int; Month: time.Month.
Exemple
Exemplul 1: Componentele datei
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, time.October, 19, 14, 30, 0, 0, time.UTC)
an, luna, zi := t.Date()
fmt.Println("Date():", an, luna, zi)
fmt.Println("Year(): ", t.Year())
fmt.Println("Month():", t.Month(), "=", int(t.Month()))
fmt.Println("Day(): ", t.Day())
fmt.Printf("Format numeric: %02d/%02d/%d\n", zi, luna, an)
}
Rezultat
Date(): 2026 October 19
Year(): 2026
Month(): October = 10
Day(): 19
Format numeric: 19/10/2026
Exemplul 2: Este aceeași zi?
Comparăm doar data, nu și ora: două evenimente în aceeași zi de calendar.
package main
import (
"fmt"
"time"
)
func aceeasiZi(a, b time.Time) bool {
a1, l1, z1 := a.Date()
a2, l2, z2 := b.Date()
return a1 == a2 && l1 == l2 && z1 == z2
}
func main() {
dimineata := time.Date(2026, 10, 19, 8, 0, 0, 0, time.UTC)
seara := time.Date(2026, 10, 19, 22, 45, 0, 0, time.UTC)
maine := time.Date(2026, 10, 20, 0, 5, 0, 0, time.UTC)
fmt.Println(aceeasiZi(dimineata, seara))
fmt.Println(aceeasiZi(seara, maine))
}
Rezultat
true
false
Exemplul 3: Vârsta unei persoane
Scădem anii, apoi scădem încă unul dacă ziua de naștere nu a venit încă anul acesta.
package main
import (
"fmt"
"time"
)
func varsta(nastere, azi time.Time) int {
ani := azi.Year() - nastere.Year()
if azi.Month() < nastere.Month() || (azi.Month() == nastere.Month() && azi.Day() < nastere.Day()) {
ani--
}
return ani
}
func main() {
azi := time.Date(2026, 10, 19, 0, 0, 0, 0, time.UTC)
fmt.Println("Ana:", varsta(time.Date(2001, 3, 8, 0, 0, 0, 0, time.UTC), azi))
fmt.Println("Radu:", varsta(time.Date(2001, 12, 2, 0, 0, 0, 0, time.UTC), azi))
}
Rezultat
Ana: 25
Radu: 24
Greșeli frecvente
- Afișezi
t.Month()și te aștepți la un număr. ApareOctober; foloseșteint(t.Month())sau formatul%02d.
Comenzi înrudite
time.Time.Clock: Citește ora dintr-un moment: Clock dă ora, minutul și secunda deodată; Hour, Minute, Second le dau pe rând.time.Time.Weekday: Ziua săptămânii (Weekday), ziua din an (YearDay) și numărul săptămânii ISO (ISOWeek) pentru un moment.time.Month: Tipul pentru lunile anului, de la time.January (1) la time.December (12); String() dă numele englezesc.time.Time.Format: Transformă un moment în text după un model scris cu data de referință 2 ianuarie 2006, 15:04:05.time.Date: Construiește un moment din an, lună, zi, oră, minut, secundă, nanosecundă și fus orar; normalizează valorile prea mari.