Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

VB.NET Week Day Dates

Posted on 2013-01-26
3
Medium Priority
?
1,450 Views
Last Modified: 2013-01-27
Hello,

I am trying to get an array of dates for a given month.

For example, the user enters the month they want e.g. September 2012.

I then need to find the first and last date of that month. (Done that)

Then I need to get the dates for each week in that month.

So it will be formatted like the below.

3 September 2012 - 7 September 2012
10 September 2012 - 14 September 2012
17 September 2012 - 21 September 2012
21 September 2012 - 28 September 2012

I need the first date it gets to start on the first week day for that month so ignoring Saturday and Sunday.
I need it to finish on the very last date of that month but during the week.

Another example would be for August 2012

1 August 2012 - 3 August 2012
6 August 2012 - 10 August 2012
13 August 2012 - 17 August 2012
20 August 2012 - 24 August 2012
27 August 2012 - 31 August 2012


I have currently got a loop which is like the below.

   Do While blStop = False
            ' TextBox1.Text &= dtestart.ToLongDateString & vbNewLine
            If dtestart.Month <> dtestart.AddDays(x).Month Then
                '    MsgBox("Month has changed")
                arrDates(TheCounter) = dtestart & " - " & dtestart.AddDays(x - 1)
                TheCounter += 1
                ReDim Preserve arrDates(TheCounter)
                blStop = True
            Else
                If dtestart.AddDays(x).DayOfWeek = DayOfWeek.Friday Then
                    arrDates(TheCounter) = dtestart & " - " & dtestart.AddDays(x)
                    TheCounter += 1
                    ReDim Preserve arrDates(TheCounter)
                    dtestart = dtestart.AddDays(x + 3)
                    x = 0
                ElseIf dtestart.AddDays(x).DayOfWeek = DayOfWeek.Monday Then
                    ' dtestart = dtestart.AddDays(x)
                    x = 0
                ElseIf dtestart.AddDays(x).DayOfWeek = DayOfWeek.Saturday Or dtestart.AddDays(x).DayOfWeek = DayOfWeek.Sunday Then
                    x += 1
                End If
            End If
            x += 1
        Loop

Open in new window


Which does report correctly to an extent however it is also bringing in October dates where as I only want September.

The results I get from the above is

03 September 2012 - 07 September 2012
10 September 2012 - 14 September 2012
17 September 2012 - 21 September 2012
24 September 2012 - 28 September 2012
01 October 2012 - 05 October 2012
08 October 2012 - 12 October 2012
15 October 2012 - 19 October 2012
22 October 2012 - 26 October 2012
29 October 2012 - 31 October 2012


Any help in trying to solve this would be great please.

Thanks,
0
Comment
Question by:BoltonWanderer
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
3 Comments
 
LVL 86

Accepted Solution

by:
Mike Tomlinson earned 1680 total points
ID: 38823213
Try this out:
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim dtestart As DateTime = DateTimePicker1.Value
        Dim weeks As List(Of String) = GetWeeks(dtestart)

        For Each week As String In weeks
            Debug.Print(week)
        Next
    End Sub

    Private Function GetWeeks(ByVal dt As DateTime) As List(Of String)
        Dim weeks As New List(Of String)

        Dim stopDT As DateTime
        Dim curDT As New DateTime(dt.Year, dt.Month, 1)
        While curDT.DayOfWeek = DayOfWeek.Saturday Or curDT.DayOfWeek = DayOfWeek.Sunday
            curDT = curDT.AddDays(1)
        End While

        While curDT.Year = dt.Year AndAlso curDT.Month = dt.Month
            stopDT = curDT
            While stopDT.DayOfWeek <> DayOfWeek.Friday
                stopDT = stopDT.AddDays(1)
            End While
            While stopDT.Month <> curDT.Month
                stopDT = stopDT.AddDays(-1)
            End While

            weeks.Add(curDT.ToString("d MMMM yyyy") & " - " & stopDT.ToString("d MMMM yyyy"))

            curDT = curDT.AddDays(1)
            While curDT.DayOfWeek <> DayOfWeek.Monday
                curDT = curDT.AddDays(1)
            End While
        End While

        Return weeks
    End Function

Open in new window

0
 
LVL 37

Expert Comment

by:TommySzalapski
ID: 38823234
Your problem is this line
dtestart = dtestart.AddDays(x + 3)
If that changes destart to the next month it will continue.

Probably the easiest way to fix it would just be to check if dtestart and dtestart.AddDays(x + 3) were the same month first and stop the loop in that case.
0
 

Author Closing Comment

by:BoltonWanderer
ID: 38823987
Worked perfectky. Thank you.
0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

It’s quite interesting for me as I worked with Excel using vb.net for some time. Here are some topics which I know want to share with others whom this might help. First of all if you are working with Excel then you need to Download the Following …
The ECB site provides FX rates for major currencies since its inception in 1999 in the form of an XML feed. The files have the following format (reducted for brevity) (CODE) There are three files available HERE (http://www.ecb.europa.eu/stats/exch…
I've attached the XLSM Excel spreadsheet I used in the video and also text files containing the macros used below. https://filedb.experts-exchange.com/incoming/2017/03_w12/1151775/Permutations.txt https://filedb.experts-exchange.com/incoming/201…
We’ve all felt that sense of false security before—locking down external access to a database or component and feeling like we’ve done all we need to do to secure company data. But that feeling is fleeting. Attacks these days can happen in many w…
Suggested Courses

715 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question