2016-10-10 5 views
3

주 번호를 해당 주일의 시작일로 변환하려면 어떻게해야합니까? 예 : 주 41 ~ 10 월 9 일, 2016? 날짜는 연도에 따라 달라야합니다. 예 : 2017 년의 경우 41 번째 주일은 10 월 8 일이어야합니다.vb6에서 주 번호를 기준으로 시작 날짜를 얻는 방법은 무엇입니까?

이미 검색 한 결과이 (How to get starting date in a Week based on week number using vb.net?)이지만 vb.net을 찾았습니다. 이것이 vb6에 적용되는지 확실하지 않습니다. 이것이 vb6에서 작동하지 않으면 어떻게 할 수 있습니까?

감사합니다 :)

답변

3

이 시도 :

Private Sub Form_Load() 

    Dim d As Date 

    d = GetWeekStartDate(41, 2016) 
    MsgBox d 
    d = GetWeekStartDate(41, 2017) 
    MsgBox d 

End Sub 

Private Function GetWeekStartDate(weekNumber As Integer, year As Integer) As Date 

    Dim startDate As Date 
    Dim day As Integer 

    startDate = DateSerial(year, 1, 1) 
    day = Weekday(startDate, vbSunday) 
    startDate = DateAdd("d", DaysToAdd(day), startDate) 

    GetWeekStartDate = DateAdd("ww", weekNumber - 1, startDate) 

End Function 

Private Function DaysToAdd(day As Integer) As Integer 

    DaysToAdd = 0 
    If day > 1 Then DaysToAdd = 7 - day + 1 

End Function 
1

당신은 모든 옵션이 필요하지 않으면이를 단순화 할 수 있지만, 잘 대해 같습니다 당신이 만들 수 있는지 꽤 괜찮아

Option Explicit 

Private Function WeekDate(_ 
    ByVal Year As Long, _ 
    ByVal Week As Long, _ 
    Optional ByVal FirstWholeWeekIs1 As Boolean, _ 
    Optional ByVal FirstDayOfWeek As VbDayOfWeek = vbUseSystemDayOfWeek) As Date 

    Dim YearDate As Date 
    Dim WeekdayOffset As Long 
    Dim WeekOffset As Long 

    YearDate = DateSerial(Year, 1, 1) 
    WeekdayOffset = Weekday(YearDate, FirstDayOfWeek) - 1 
    If WeekdayOffset <> 0 Then 
     YearDate = DateAdd("d", -WeekdayOffset, YearDate) 
     WeekOffset = IIf(FirstWholeWeekIs1, 0, 1) 
    Else 
     WeekOffset = 1 
    End If 
    WeekDate = DateAdd("ww", Week - WeekOffset, YearDate) 
End Function 

Private Sub Form_Load() 
    Dim Year As Long 
    Dim Week As Long 

    AutoRedraw = True 

    Year = 2015 
    Week = 1 
    Print Year, Week, WeekDate(Year, Week) 
    Print Year, Week, WeekDate(Year, Week, FirstWholeWeekIs1:=True) 
    Week = 2 
    Print Year, Week, WeekDate(Year, Week) 
    Print Year, Week, WeekDate(Year, Week, FirstDayOfWeek:=vbMonday) 
    Year = 2016 
    Week = 41 
    Print Year, Week, WeekDate(Year, Week, FirstWholeWeekIs1:=True) 
    Year = 2017 
    Week = 1 
    Print Year, Week, WeekDate(Year, Week, FirstWholeWeekIs1:=False) 
    Print Year, Week, WeekDate(Year, Week, FirstWholeWeekIs1:=True) 
End Sub 

아닌 경우 조정.

+0

내가 변수로 년도를 사용하지 않을 것입니다. ms 액세스 기능이기도합니다. – dbmitch

관련 문제