2016-01-24 36 views

回答

2

您的最佳帮助将是DatePart函数(有关文档,请参阅here)。这并不直接,因为有些选项可以考虑,比如“每周的第一天”和“年的第一周”,但您可以在DatePart中定义这些选项。

这将是我的解决方案:

option explicit 

function getDateByWeek(year, week, day) 
    dim dt, woy, add_days 

    dt = DateSerial(year, 1, 1) 
    do 
     woy = DatePart("ww", dt, vbSunday, vbFirstFullWeek) 
     ' possibly change options [,firstdayofweek[,firstweekofyear]] 
     dt = DateAdd("d", 1, dt) 
    loop while woy<>1 

    add_days = week * 7 + day - 2 
    ' -1 because we already added one day extra in the loop 
    ' -1 to correct given day (sunday = 1) 

    getDateByWeek = DateAdd("d", add_days, dt) 
end function 

Response.Write "RESULT: " & getDateByWeek(2016, 3, 1) ' -> 24.01.2016 

我开始通过寻找在一个循环的第一周的第一天,然后加入天的累计量有一个结果。

+0

尝试在您的代码块gpinkas之前放置<! - language:lang-vbs - >。 – Paul

+0

Aaah,这更好,谢谢你的提示。 :) – gpinkas

+1

@Paul或者将[tag:vbscript]添加到问题上的标签列表中,以使其自动应用。 – Lankymart

0

那么最好的方法是制定一年的一周开始,并从那里开始。

首先,任何一年的第一个星期四总是在一年的第一个星期,因此在1月1日添加正确数字的简单计算是显而易见的。在此之后,我们简单地多出几周并添加天数:

Const C_THURSDAY = 5 
Function GetDateFromYWD(y, w, d) 
    Dim tDate, aDate 
    'Get the first of the year... 
    tDate = DateSerial(y, 1, 1) 
    'Workout the start of the first week in the year... 
    aDate = tDate + Int(WeekDay(tDate)>C_THURSDAY And 7) - WeekDay(tDate) 
    'Add on the number of weeks plus days we're looking for... 
    aDate = aDate + (w * 7) + d 
    GetDateFromYWD = aDate 
End Function 
+0

只是想我会稍微修改一下。与gpinkas的版本不同,我使用数学和布尔比较来实现相同的目的。 – Paul

相关问题