web-dev-qa-db-fra.com

Comment obtenir la date du dimanche prochain?

Dupliquer possible:
ASP.net le mardi prochain

Étant donné le jour du mois, comment puis-je obtenir le dimanche suivant à partir de ce jour?

Donc si je passe le mardi 13 septembre 2011, il reviendra le 18 septembre.

42
codecompleting

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);
    }
87
Thomas Levesque

date.AddDays(7 - (int)date.DayOfWeek) devrait le faire, je pense.

date.DayOfWeek retournera une valeur enum qui représente le jour (où 0 est le dimanche).

23
Joey
        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);
6
Giedrius
/// <summary>
/// Finds the next date whose day of the week equals the specified day of the week.
/// </summary>
/// <param name="startDate">
/// The date to begin the search.
/// </param>
/// <param name="desiredDay">
/// The desired day of the week whose date will be returneed.
/// </param>
/// <returns>
/// 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.
/// </returns>
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/

3
Jason Quinn

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: mardi = 2

Puis soustrayez-le du dimanche, 7-2 = 5 jours à ajouter pour obtenir la prochaine date du dimanche. :)

2
Bryan Hong
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 renvoyée si la date est déjà un dimanche; Je suppose que non, mais changez ce qui précède en boucle while si je me trompe.

0
Peter O.

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;
    }
0
Peter Kelly
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;
}
0
MattW