2016-01-24 49 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