time.Weekday în Go

Tipul pentru zilele săptămânii, de la time.Sunday (0) la time.Saturday (6); String() dă numele englezesc.

Sintaxă
type Weekday int

const (
    Sunday Weekday = iota   // 0
    Monday                  // 1
    ...
    Saturday                // 6
)

func (d Weekday) String() string

Ce face time.Weekday

time.Weekday este un întreg: time.Sunday = 0, time.Monday = 1 … time.Saturday = 6. Îl returnează t.Weekday(). String() dă numele englezesc ("Monday"), apelat automat de fmt.

Pentru că duminica este 0, un tablou cu nume românești trebuie să înceapă cu duminică.

Ce returnează

String() returnează numele zilei în engleză.

Exemple

Exemplul 1: Program de lucru pe zile

package main

import (
	"fmt"
	"time"
)

var ziRo = [...]string{"duminică", "luni", "marți", "miercuri", "joi", "vineri", "sâmbătă"}

func program(z time.Weekday) string {
	switch z {
	case time.Saturday:
		return "10:00-14:00"
	case time.Sunday:
		return "închis"
	default:
		return "09:00-18:00"
	}
}

func main() {
	for z := time.Sunday; z <= time.Saturday; z++ {
		fmt.Printf("%d %-9s %-9s %s\n", z, z, ziRo[z], program(z))
	}
}

Rezultat

0 Sunday    duminică  închis
1 Monday    luni      09:00-18:00
2 Tuesday   marți     09:00-18:00
3 Wednesday miercuri  09:00-18:00
4 Thursday  joi       09:00-18:00
5 Friday    vineri    09:00-18:00
6 Saturday  sâmbătă   10:00-14:00

Exemplul 2: Următoarea zi de luni

package main

import (
	"fmt"
	"time"
)

func urmatoarea(t time.Time, zi time.Weekday) time.Time {
	zile := (int(zi) - int(t.Weekday()) + 7) % 7
	if zile == 0 {
		zile = 7
	}
	return t.AddDate(0, 0, zile)
}

func main() {
	azi := time.Date(2026, time.October, 22, 0, 0, 0, 0, time.UTC)
	fmt.Println("Azi:", azi.Format("02.01.2006"), azi.Weekday())
	l := urmatoarea(azi, time.Monday)
	fmt.Println("Luni următoare:", l.Format("02.01.2006"), l.Weekday().String())
}

Rezultat

Azi: 22.10.2026 Thursday
Luni următoare: 26.10.2026 Monday

Greșeli frecvente

  • Presupui că luni este 0. În Go luni este 1, iar duminica este 0.

Comenzi înrudite

  • 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.AddDate: Adaugă ani, luni și zile din calendar la o dată (de exemplu scadența peste o lună) și normalizează rezultatul.