Ce face time.Time.Weekday
t.Weekday() returnează ziua săptămânii ca time.Weekday: time.Sunday = 0, time.Monday = 1 … time.Saturday = 6. Atenție, săptămâna începe duminica, nu luni.
t.YearDay() returnează a câta zi din an este (1-365, sau 366 în an bisect). t.ISOWeek() returnează anul și săptămâna după standardul ISO 8601, folosit în Europa: săptămâna începe luni, iar săptămâna 1 este cea care conține prima joi din an. De aceea 1 ianuarie poate face parte din săptămâna 53 a anului trecut.
Ce returnează
Weekday: time.Weekday. YearDay: int. ISOWeek: (year, week int).
Exemple
Exemplul 1: Zi lucrătoare sau weekend
package main
import (
"fmt"
"time"
)
func main() {
start := time.Date(2026, time.October, 16, 0, 0, 0, 0, time.UTC)
for i := range 5 {
zi := start.AddDate(0, 0, i)
tip := "zi lucrătoare"
if zi.Weekday() == time.Saturday || zi.Weekday() == time.Sunday {
tip = "weekend"
}
fmt.Printf("%s %-9s (%d) %s\n", zi.Format("02.01"), zi.Weekday(), zi.Weekday(), tip)
}
}
Rezultat
16.10 Friday (5) zi lucrătoare
17.10 Saturday (6) weekend
18.10 Sunday (0) weekend
19.10 Monday (1) zi lucrătoare
20.10 Tuesday (2) zi lucrătoare
Exemplul 2: Ziua din an și săptămâna ISO
1 ianuarie 2027 cade vineri, deci aparține ultimei săptămâni ISO din 2026.
package main
import (
"fmt"
"time"
)
func main() {
date := []time.Time{
time.Date(2026, 10, 19, 0, 0, 0, 0, time.UTC),
time.Date(2026, 12, 31, 0, 0, 0, 0, time.UTC),
time.Date(2027, 1, 1, 0, 0, 0, 0, time.UTC),
time.Date(2028, 12, 31, 0, 0, 0, 0, time.UTC),
}
for _, t := range date {
an, sapt := t.ISOWeek()
fmt.Printf("%s: ziua %3d din an, săptămâna ISO %d/%d, %s\n",
t.Format("02.01.2006"), t.YearDay(), sapt, an, t.Weekday())
}
}
Rezultat
19.10.2026: ziua 292 din an, săptămâna ISO 43/2026, Monday
31.12.2026: ziua 365 din an, săptămâna ISO 53/2026, Thursday
01.01.2027: ziua 1 din an, săptămâna ISO 53/2026, Friday
31.12.2028: ziua 366 din an, săptămâna ISO 52/2028, Sunday
Greșeli frecvente
- Presupui că
Weekday()începe cu luni = 0. În Go duminica este 0; pentru o numerotare luni = 1 … duminică = 7 scrie(int(t.Weekday())+6)%7 + 1. - Folosești
YearDay()/7ca număr al săptămânii. Nu se potrivește cu calendarele europene; foloseșteISOWeek()și anul returnat de el.
Comenzi înrudite
time.Weekday: Tipul pentru zilele săptămânii, de la time.Sunday (0) la time.Saturday (6); String() dă numele englezesc.time.Time.Date: Citește data dintr-un moment: Date dă anul, luna și ziua deodată; Year, Month și Day le dau pe rând.time.Time.AddDate: Adaugă ani, luni și zile din calendar la o dată (de exemplu scadența peste o lună) și normalizează rezultatul.