我需要知道它是基於一週數和一天數的日期。獲取什麼日期是基於周編號和日期編號asp classic?
因此,如果我有weeknr = 3和day = 1(今天 - 星期日)並且可以說年= 2016我怎麼能在2016-01-24做到這一點。
任何輸入真的很感激,謝謝。
我需要知道它是基於一週數和一天數的日期。獲取什麼日期是基於周編號和日期編號asp classic?
因此,如果我有weeknr = 3和day = 1(今天 - 星期日)並且可以說年= 2016我怎麼能在2016-01-24做到這一點。
任何輸入真的很感激,謝謝。
您的最佳幫助將是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
我開始通過尋找在一個循環的第一週的第一天,然後加入天的累計量有一個結果。
那麼最好的方法是制定一年的一週開始,並從那裏開始。
首先,任何一年的第一個星期四總是在一年的第一個星期,因此在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
只是想我會稍微修改一下。與gpinkas的版本不同,我使用數學和布爾比較來實現相同的目的。 – Paul
嘗試在您的代碼塊gpinkas之前放置<! - language:lang-vbs - >。 – Paul
Aaah,這更好,謝謝你的提示。 :) – gpinkas
@Paul或者將[tag:vbscript]添加到問題上的標籤列表中,以使其自動應用。 – Lankymart