time.Time.Weekday în Go

Ziua săptămânii (Weekday), ziua din an (YearDay) și numărul săptămânii ISO (ISOWeek) pentru un moment.

Sintaxă
func (t Time) Weekday() Weekday
func (t Time) YearDay() int
func (t Time) ISOWeek() (year, week int)

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()/7 ca număr al săptămânii. Nu se potrivește cu calendarele europene; folosește ISOWeek() ș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.