Duplication possible:
ASP.net reçoit le mardi prochain
Étant donné un jour du mois, comment puis-je obtenir le prochain dimanche de ce jour?
Donc, si je passe mardi 13 septembre 2011, il reviendra le 18 septembre.
J’utilise cette méthode d’extension:
public static DateTime Next(this DateTime from, DayOfWeek dayOfWeek) { int start = (int)from.DayOfWeek; int target = (int)dayOfWeek; if (target <= start) target += 7; return from.AddDays(target - start); }
date.AddDays(7 - (int)date.DayOfWeek)
devrait le faire je pense.
date.DayOfWeek
renverra une valeur enum qui représente le jour (où 0 correspond à dimanche).
var date = DateTime.Now; var nextSunday = date.AddDays(7 - (int) date.DayOfWeek);
Si vous avez besoin du dimanche le plus proche, code un peu différent (comme si vous étiez le dimanche, le dimanche le plus proche est aujourd’hui):
var nearestSunday = date.AddDays(7 - date.DayOfWeek == DayOfWeek.Sunday ? 7 : date.DayOfWeek);
/// /// Finds the next date whose day of the week equals the specified day of the week. /// /// /// The date to begin the search. /// /// /// The desired day of the week whose date will be returneed. /// /// /// The returned date is on the given day of this week. /// If the given day is before given date, the date for the /// following week's desired day is returned. /// public static DateTime GetNextDateForDay( DateTime startDate, DayOfWeek desiredDay ) { // (There has to be a better way to do this, perhaps mathematically.) // Traverse this week DateTime nextDate = startDate; while( nextDate.DayOfWeek != desiredDay ) nextDate = nextDate.AddDays( 1D ); return nextDate; }
La source:
http://angstrey.com/index.php/2009/04/25/finding-the-next-date-for-day-of-week/
Voici le code:
int dayOfWeek = (int) DateTime.Now.DayOfWeek; DateTime nextSunday = DateTime.Now.AddDays(7 - dayOfWeek).Date;
Obtenez d’abord la valeur numérique du jour de la semaine, dans votre exemple: Tuesday = 2
Puis soustrayez-le du dimanche, 7 -2 = 5 jours à append pour obtenir la date du dimanche suivant. 🙂
DateTime dt=dateTime; do { dt=dt.AddDays(1); } while(dt.DayOfWeek!= DayOfWeek.Sunday); // 'dt' is now the next Sunday
Votre question n’est pas claire si la même date est retournée si la date est déjà un dimanche; Je suppose que non, mais changez ce qui précède en une boucle while si je me trompe.
Exemple utilisant la récursivité
private static DateTime GetNextSunday(DateTime dt) { var tomorrow = dt.AddDays(1); if (tomorrow.DayOfWeek != DayOfWeek.Sunday) { GetNextSunday(tomorrow); } return tomorrow; }
public static DateTime GetNextSunday (DateTime date) { if (date.DayOfWeek == DayOfWeek.Sunday) date = date.AddDays(1); while (date.DayOfWeek != DayOfWeek.Sunday) date = date.AddDays(1); return date; }