Questo esempio C# mostra come calcolare il numero di settimane presenti in un mese.

Per capire come funziona il codice va prima chiarito cosa si intende per settimana.

Questo perché, ad esempio in Italia, la settimana inizia con il lunedì (monday) mentre in altri stati, come ad esempio in America, la settimana inizia con la domenica (sunday).
Inoltre per le settimane iniziali e finali, ovvero quelle settimane che hanno meno di 7 giorni, va definito se devono essere conteggiate o meno. Ad esempio si può considerare le settimana con almeno 4gg come completa e quindi da aggiungere al conteggio finale.

La funzione seguente, GetWeekInMonth, fa proprio questo, accetta come parametro una data nel mese, il numero di giorni per considerare la settimana completa e il giorno con cui inizia la settimana:

C#: GetWeekInMonth

public int GetWeeksInMonth(DateTime date, DayOfWeek startDayOfWeek = DayOfWeek.Monday, int minDays = 4)
{
    int weeks = 0;
    var firstDate = date.Date.AddDays(-date.Day + 1);
    var firstDayOfWeek = firstDate.DayOfWeek;

    int daysStart = 7 - ((int)firstDayOfWeek - (int)startDayOfWeek);
    // prima settimana considerata intera
    if (daysStart >= minDays)
        weeks++;

    var daysInMonth = firstDate.AddMonths(1).AddDays(-1).Day;

    // settimane centrali, intere di 7 giorni
    int weeksComplete = (daysInMonth - daysStart) / 7;
    weeks += weeksComplete;

    // last week
    int daysEnd = daysInMonth - (daysStart + weeksComplete * 7);
    if (daysEnd >= minDays)
        weeks++;

    return weeks;
}
che va richiamata con

C#: Esempio

var dt = new DateTime(2022, 7, 22);

// settimana che inizia da lunedi
int weekN1 = GetWeeksInMonth(dt);
Console.WriteLine($"Date: {dt}, Weeks: {weekN1}");
// Date: 22/07/2021 00:00:00, Weeks: 4	

// settimana che inizia da domenica
int weekN2 = GetWeeksInMonth(dt, DayOfWeek.Sunday, 4);
Console.WriteLine($"Date: {dt}, Weeks: {weekN2 }");
// Date: 22/07/2021 00:00:00, Weeks: 5
Tags:
C#236 Esempi225
Potrebbe interessarti anche: