Получить список последних 10 понедельников - PullRequest
4 голосов
/ 22 апреля 2010

Я хочу выпадающий список, который позволит мне выбрать «Неделя, начинающаяся в понедельник, 20-е», начиная с 10 понедельников, но я не знаю, как это сделать.

Я использовал date.now() и т. д., но не знаю, как это сделать.

Спасибо, Билли

ОБНОВЛЕННЫЙ КОД

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

Ответы [ 4 ]

2 голосов
/ 22 апреля 2010

Можно придумать формулу для вычисления дат предыдущих понедельников, но почему бы не сделать что-то простое:

  • Начать цикл.
  • Вычтите один день.
  • Проверьте, не понедельник ли это.
    • Если это так, добавить в список.
    • Если список содержит 10 элементов, цикл выхода.
  • Вернуться к началу цикла.

Я уверен, что вы можете реализовать это. Это не такой быстрый способ, но он прост и, вероятно, достаточно быстр для большинства целей. Если вы хотите оптимизировать его, вы можете сделать это, но это, вероятно, не стоит вашего времени, если это не выполняется много раз в секунду.

1 голос
/ 22 апреля 2010

Давайте работать через это.Я сделаю это на C #, но, надеюсь, какой-нибудь предприимчивый молодой полиглот сможет сделать перевод для меня и набрать принятый ответ.

DateTime.Today даст вам сегодняшнюю дату.DateTime.Today.DayOfWeek возвращает вам сегодняшний «день недели» в виде enum, где воскресенье - 0, а суббота - 6.

Таким образом, мы можем получить самый последний понедельник, используя:

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

edit Здесь есть один маленький сбой: если сегодня воскресенье, вы получите завтрашнюю дату , а не прошлый понедельник.Вероятно, существует какой-то хитрый математический способ обойти это, но такой же простой способ добавить дополнительную проверку:

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

Тогда нам просто нужно получить десять из них:

var lastTenMondays = from i in Enumerable.Range(0, 10)
                     select lastMonday.AddDays(i * -7);
0 голосов
/ 15 мая 2011

Я искал что-то подобное, только то, что я хотел показать в предстоящие понедельники. Эта ветка помогла как-то. Спасибо! Даже если эта ветка старая, для любого, кто сталкивается, это может быть полезно:

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
0 голосов
/ 22 февраля 2011

Возможно, уже поздно, но может быть полезно для других.

Вы можете делать то, что сказал Марк, но вместо продолжения цикла, как только вы найдете понедельник, вы можете затем вычесть 7 (или добавить, если хотите найти следующие 10 понедельников) дней и получить другой понедельник, и вы можете сделать это 10 раз

* 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.

это может сэкономить время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...