2010-04-21 4 views
4

Je veux avoir une liste déroulante qui me permet de sélectionner "Semaine débutant le lundi 20" en remontant 10 lundi mais je ne suis pas sûr de savoir comment s'y prendre.Obtenez une liste des 10 derniers lundis

J'ai utilisé date.now(), etc. avant mais je ne sais pas comment faire celui-ci.

Merci, Billy

CODE MISE À JOUR

Public Sub GetMondays() 
    Dim dtMondays As New DataTable() 
    dtMondays.Columns.Add("Date") 
    Dim i As Integer = 1 
    While (dtMondays.Rows.Count < 11) 
     Dim Day As DateTime = Today.AddDays(-i) 
     If Day.DayOfWeek = 1 Then 
      dtMondays.Rows.Add(Day) 
     End If 
     i += 1 

    End While 

    drpDate.DataSource = dtMondays 
    drpDate.DataBind() 

End Sub 

Répondre

2

Vous pouvez trouver une formule de calcul des dates du lundi précédent, mais pourquoi ne pas faire quelque chose de simple:

  • Commencez la boucle.
  • Soustraire un jour.
  • Vérifiez si c'est lundi.
    • Si c'est le cas, ajoutez à une liste.
    • Si la liste contient 10 éléments, quittez la boucle.
  • Retour au début de la boucle.

Je suis sûr que vous pouvez implémenter cela. Ce n'est pas le moyen le plus rapide, mais c'est simple et probablement assez rapide pour la plupart des objectifs. Si vous voulez l'optimiser, vous pouvez le faire, mais cela ne vaut probablement pas votre temps à moins que cela ne soit exécuté plusieurs fois par seconde.

+0

hey merci qui a travaillé si elle est un peu lent. Pouvez-vous consulter mon code, je l'ai ajouté à la question. Ta! – iamjonesy

+1

@Jonesy: J'utiliserais DayOfWeek.Monday au lieu de 1 (http://msdn.microsoft.com/en-us/library/system.datetime.dayofweek.aspx) et testerais 10 (par exemple <= 10) plutôt que 11. –

1

Travaillons à travers. Je vais le faire en C# mais j'espère que certains jeunes polyglottes entreprenants peuvent faire la traduction pour moi et marquer la réponse acceptée.

DateTime.Today Vous obtenez la date d'aujourd'hui. DateTime.Today.DayOfWeek vous obtient « le jour de la semaine » d'aujourd'hui comme ENUM, où dimanche est 0 et samedi est 6.

Ainsi, nous pouvons obtenir le dernier lundi en utilisant:

var lastMonday = DateTime.Today.AddDays(1 - (int)DateTime.Today.DayOfWeek); 

modifier Il y a un petit pépin ici, en ce que si aujourd'hui c'est dimanche, vous obtiendrez demain date, pas lundi dernier. Il y a probablement une certaine façon mathématique vraiment difficile de se déplacer, mais il est tout aussi facile de jeter un contrôle supplémentaire:

if (lastMonday > DateTime.Today) lastMonday = lastMonday.AddDays(-7); 

Ensuite, nous avons juste besoin de dix d'entre eux:

var lastTenMondays = from i in Enumerable.Range(0, 10) 
        select lastMonday.AddDays(i * -7); 
+0

Pour obtenir le dernier lundi sans l'instruction if: lastMonday = DateTime.Today.AddDays (- ((int) DateTime.Today.DayOfWeek + 6)% 7); utiliser MOD au lieu de% pour VB –

+0

@B Pete nice! Comme je l'ai suggéré, vous devriez traduire mon code sur VB.NET et le poster comme votre propre réponse. –

0

Il est probablement en retard mais pourrait être utile pour d'autres. Vous pouvez faire ce que Mark a dit mais au lieu de continuer la boucle une fois que vous trouvez un lundi, vous pouvez alors soustraire 7 (ou ajouter si vous voulez trouver les 10 prochains lundi) jours et obtenir l'autre lundi et vous pouvez le faire 10 fois

* Begin loop. 
* Subtract one day. 
* Check if it is Monday. 
     o If so, add to a list. 
     o (in a for i = 1 to 10 loop) add 7 days and add to list (end for loop) 
* Go back to start of loop. 

Ceci pourrait économiser du temps.

0

Je cherchais quelque chose de similaire, seulement que je voulais afficher les lundis à venir. Ce fil a aidé d'une certaine façon. Merci! Même si ce fil est vieux, pour une à venir à travers, cela peut être utile:

Public Sub Form5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

     Dim nextMondays = DateTime.Today.AddDays(1 - CInt(DateTime.Today.DayOfWeek)) 
     Dim i As Integer = 1 

     If nextMondays < DateTime.Today Then 
      nextMondays = nextMondays.AddDays(+7) 
     End If 

     For i = 0 To 14 
      ComboBox1.Items.Add("Mon. " + nextMondays.AddDays(i * +7)) 
     Next i 
End Sub 
Questions connexes