我需要根据周数和天数知道它的日期。
所以,如果我有daynr = 3和day = 1(今天 - 星期日),让我们说年份= 2016,我怎么能把它变成2016-01-24。
任何输入都非常感谢,谢谢。
答案 0 :(得分: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
我首先在循环中找到第一周的第一天,然后添加累计天数以获得结果。
答案 1 :(得分: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