La solution acceptée n'est pas correcte.
Vous devez basculer lorsque la semaine «se rompt», c'est-à-dire quand il considère que la semaine se termine ou commence et que la formule de la solution acceptée ne l'est pas.
Ce n'est pas si visible un lundi que le début de la semaine, mais plus si vous envisagez jeudi la fin de la semaine.
formule correcte est (pour un jeudi comme jour de fin):
DateTime thu = date.AddDays(-(int)(date.AddDays(-5).DayOfWeek) -1);
Pour lundi, -5 passeraient à -2.
code exemple pour imprimer
String s = "";
DateTime date = new DateTime(2017, 1, 1);
for (int i = 0; i < 14; i++)
{
date = date.AddDays(1);
DateTime thu = date.AddDays(-(int)(date.AddDays(-5).DayOfWeek) -1);
DateTime mon = date.AddDays(-(int)(date.AddDays(-2).DayOfWeek) -1);
s += date.ToString() + " - Thu: " + thu.ToString() + " - Mon: " + mon.ToString() + "\r\n";
}
Console.WriteLine(s);
Qu'en est la complication de calcul de la durée hebdomadaire du travail précédent après la fermeture des bureaux le vendredi, qui devrait alors revenir la semaine en cours ce vendredi était? –