Maison >développement back-end >Golang >Comment calculer une plage de dates en fonction d'un numéro de semaine dans Golang ?

Comment calculer une plage de dates en fonction d'un numéro de semaine dans Golang ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-31 10:01:08744parcourir

How to Calculate a Date Range Given a Week Number in Golang?

Plage de dates par numéro de semaine dans Golang

Arrière-plan :

Time.ISOWeek() renvoie le numéro de la semaine qui commence le lundi. Cet article montre comment obtenir la plage de dates pour une semaine donnée, en supposant qu'elle commence à partir du dimanche.

Solution :

  1. Calculer le début de la semaine :

Commencez par vous aligner sur le premier jour de la semaine (lundi) à partir du milieu de l'année. Corrigez en ajoutant des jours en fonction de la différence de semaine multipliée par 7.

func WeekStart(year, week int) time.Time {
    t := time.Date(year, 7, 1, 0, 0, 0, 0, time.UTC)
    if wd := t.Weekday(); wd == time.Sunday {
        t = t.AddDate(0, 0, -6)
    } else {
        t = t.AddDate(0, 0, -int(wd)+1)
    }
    _, w := t.ISOWeek()
    t = t.AddDate(0, 0, (week-w)*7)
    return t
}
  1. Calculez la plage de semaines :

Pour obtenir la plage de dates , déterminez le premier jour de la semaine et ajoutez 6 jours pour obtenir le dernier jour.

func WeekRange(year, week int) (start, end time.Time) {
    start = WeekStart(year, week)
    end = start.AddDate(0, 0, 6)
    return
}

Exemple :

fmt.Println(WeekRange(2018, 1))
fmt.Println(WeekRange(2018, 2))
fmt.Println(WeekRange(2019, 1))
fmt.Println(WeekRange(2019, 2))

Sortie (essayez-le sur Go Playground) :

2018-01-01 00:00:00 +0000 UTC 2018-01-07 00:00:00 +0000 UTC
2018-01-08 00:00:00 +0000 UTC 2018-01-14 00:00:00 +0000 UTC
2018-12-31 00:00:00 +0000 UTC 2019-01-06 00:00:00 +0000 UTC
2019-01-07 00:00:00 +0000 UTC 2019-01-13 00:00:00 +0000 UTC

Remarque complémentaire :

La fonction WeekStart() gère les semaines hors plage. Les semaines en dehors de la plage annuelle sont interprétées respectivement comme la dernière ou la première semaine de l'année précédente ou suivante.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn