Je me demandais si vous savez comment obtenir la date du lundi de la semaine en fonction de la date d'aujourd'hui?Recevez la date du premier lundi de la semaine?
-à-dire 2009-11-03 passé et 2009-11-02 est renvoyée en arrière
/M
Je me demandais si vous savez comment obtenir la date du lundi de la semaine en fonction de la date d'aujourd'hui?Recevez la date du premier lundi de la semaine?
-à-dire 2009-11-03 passé et 2009-11-02 est renvoyée en arrière
/M
Voici ce que j'utilise (probablement pas internationalisé):
DateTime input = //...
int delta = DayOfWeek.Monday - input.DayOfWeek;
DateTime monday = input.AddDays(delta);
Oui, en effet: Non internationalisé. Le lundi n'est pas toujours le premier jour de la semaine. –
Vous pouvez obtenir le premier jour de la semaine en utilisant: CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek –
En fait, le premier jour de la semaine selon la culture est sans intérêt dans ce cas; l'OP veut le lundi de la semaine, pas le premier jour de la semaine. –
Quelque chose comme ça fonctionnerait
DateTime dt = DateTime.Now;
while(dt.DayOfWeek != DayOfWeek.Monday) dt = dt.AddDays(-1);
Je suis sûr qu'il ya un plus belle façon tho :)
Essayez ceci:
public DateTime FirstDayOfWeek(DateTime date)
{
var candidateDate=date;
while(candidateDate.DayOfWeek!=DayOfWeek.Monday) {
candidateDate=candidateDate.AddDays(-1);
}
return candidateDate;
}
EDIT complet: surcharge pour la date d'aujourd'hui:
public DateTime FirstDayOfCurrentWeek()
{
return FirstDayOfWeek(DateTime.Today);
}
Pourquoi boucler ??, il ya des façons de le faire sans boucle.Voir les réponses ci-dessous –
La réponse Pondium peut rechercher avant dans certains cas. Si vous souhaitez que la recherche en arrière, je pense qu'il devrait être:
DateTime input = //...
int delta = DayOfWeek.Monday - input.DayOfWeek;
if(delta > 0)
delta -= 7;
DateTime monday = input.AddDays(delta);
Cela devrait être la bonne réponse car il gère le dimanche, à savoir FirstDayOfWeek est le lundi, donc si dimanche est la date d'entrée, il devrait retourner le lundi avant, mais pas la réponse acceptée. –
+1 Si le 'input' est 01/01/2017 (un dimanche) ce code donne le 26/12/2016 comme le premier jour de la semaine! Pas 2/1/2017 (que la réponse acceptée donne!) –
Cela fonctionne également pour 01/01/2019 = 31/12/2018! –
var now = System.DateTime.Now;
var result = now.AddDays(-((now.DayOfWeek - System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.FirstDayOfWeek + 7) % 7)).Date;
sera probablement vous revenir avec lundi. Sauf si vous utilisez une culture où le lundi n'est pas le premier jour de la semaine.
Qu'en est-:
CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek
Pourquoi ne pas utiliser la solution native?
La question est d'obtenir la date spécifique (c.-à-d. 2015-11-20) non le jour défini comme le premier jour. –
public static class DateTimeExtension
{
public static DateTime GetFirstDayOfWeek(this DateTime date)
{
var firstDayOfWeek = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
while (date.DayOfWeek != firstDayOfWeek)
{
date = date.AddDays(-1);
}
return date;
}
}
International ici. Je pense que la prolongation peut être plus utile.
Jetez un oeil à cette question: http://stackoverflow.com/questions/38039/how-can-i-get-the-datetime-for-the-start-of-the-week –