简体   繁体   中英

Convert year and week number to date

I'm using form elements to create a datepicker. You can either pick a year, a month and a day. Or you can pick a year and a week. I'm struggling with the week bit.

You select a start year and a start week and then an end year and an end week.

Let's say you pick 4 as the start week and 7 as the end week. I then want Monday week 4 as the start date and Sunday week 7 as the end date.

How do I get those dates in the format YYYY-MM-DD? Don't know where to start!

What I have now is four dropdown menus. Start year, start week, end year and end week. Anyone able to point me in the right direction?

There are many, many different ways to go about this problem. I started with asking myself, "How would I get the date given the day and month?", then I worked backwards from that, with given the week number, how to get the date. The answer is pretty straight forward and involves a double For loop and the use of Application.WorksheetFunction.WeekNum in VBA. Setting the start of week to Monday will also return the Monday of that given week so no extra effort is required for that.

Sub Convert_Dates()

    'user inputs
    Dim lYear As Long: lYear = 2020
    Dim lWeekNum As Long: lWeekNum = 4


    Dim lMonth As Long, lDay As Long


    For lMonth = 1 To 12
        For lDay = 1 To 31
            If Application.WorksheetFunction.WeekNum(DateSerial(lYear, lMonth, lDay), vbMonday) = lWeekNum Then
                Debug.Print Format(DateSerial(lYear, lMonth, lDay), "YYYY-MM-DD")
                Exit Sub
            End If
        Next lDay
    Next lMonth

End Sub

And the output is:

在此处输入图像描述

I am sure you can now modify this to meet your needs.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM