我需要知道它是基于一周数和一天数的日期。获取什么日期是基于周编号和日期编号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