weekNumber = 45,
year = 2016
的第一個星期的條件:
-Starts週一
-vbFirstFourDays - 開始與具有在新的一年
至少四天的第一週如何獲得具有給定數據的日期'Monday 07.11.2016' (dd.mm.yyyy)
?
weekNumber = 45,
year = 2016
的第一個星期的條件:
-Starts週一
-vbFirstFourDays - 開始與具有在新的一年
至少四天的第一週如何獲得具有給定數據的日期'Monday 07.11.2016' (dd.mm.yyyy)
?
由於接受的答案仍然有錯誤的結果我在這裏做一個比較。
Option Explicit
Dim year, wn, wd, wk, Jan4, wdn, wno, nDay, Out
wn = 45
For year = 2012 to 2018
Wscript.Echo "LotPings : " & ShowDate(DateYWkWd(year,wn,1))
Wscript.Echo "Lankymart: " & Showdate(Lankymart(year,wn))
Wscript.Echo "duDE : " & Showdate( duDE(year,wn))
Wscript.Echo
Next
Function DateYWkWd(year, wn, wd)
' returns date based von VbMondeay and vbFirstFourDays
Jan4 = Dateserial(year,1,4) ' garantied to be in first week
DateYWkWd = DateAdd("ww",wn-1, DateAdd("d",wd-Weekday(Jan4,2),Jan4))
end Function
Function Lankymart(year, wn)
wd = DateAdd("ww", wn, DateSerial(year,1,1))
Lankymart = wd - WeekDay(wd, vbMonday) + 1
end Function
Function duDE(year, wn)
nDay = 4 + (wn - 1)*7 - 1
duDE = DateAdd("d", nDay, DateSerial(year,1,1))
end Function
Function ShowDate(date)
Wd = Weekday(date,vbMonday)
Wdn = WeekDayName(Wd, True,vbMonday)
Wno = datepart("ww", date, vbMonday, vbFirstFourDays)
Out = Wdn & " " & date & " WeekNo : " & Wno
If Wno <> wn Then Out = Out & " **wrong week **"
If Wd <> 1 Then Out = Out & " **wrong wkday**"
ShowDate = Out
end Function
這裏輸出。該功能DateYWkWd可以unsed普遍 提供的一年,週數和星期(1 = Mon..7 =星期日)
LotPings : Mon 11/5/2012 WeekNo : 45
Lankymart: Mon 11/5/2012 WeekNo : 45
duDE : Wed 11/7/2012 WeekNo : 45 **wrong wkday**
LotPings : Mon 11/4/2013 WeekNo : 45
Lankymart: Mon 11/11/2013 WeekNo : 46 **wrong week **
duDE : Fri 11/8/2013 WeekNo : 45 **wrong wkday**
LotPings : Mon 11/3/2014 WeekNo : 45
Lankymart: Mon 11/10/2014 WeekNo : 46 **wrong week **
duDE : Sat 11/8/2014 WeekNo : 45 **wrong wkday**
LotPings : Mon 11/2/2015 WeekNo : 45
Lankymart: Mon 11/9/2015 WeekNo : 46 **wrong week **
duDE : Sun 11/8/2015 WeekNo : 45 **wrong wkday**
LotPings : Mon 11/7/2016 WeekNo : 45
Lankymart: Mon 11/7/2016 WeekNo : 45
duDE : Mon 11/7/2016 WeekNo : 45
LotPings : Mon 11/6/2017 WeekNo : 45
Lankymart: Mon 11/6/2017 WeekNo : 45
duDE : Wed 11/8/2017 WeekNo : 45 **wrong wkday**
LotPings : Mon 11/5/2018 WeekNo : 45
Lankymart: Mon 11/12/2018 WeekNo : 46 **wrong week **
duDE : Thu 11/8/2018 WeekNo : 45 **wrong wkday**
所以,你可以通過
4 + (45 - 1)*7 - 1 = 311
得到一天,因爲第一週只有4天,其餘44個星期7天。
現在,你可以通過使用DateAdd獲取日期:
Dim nDay
nDay = 4 + (45 - 1)*7 - 1
Dim NewDate
NewDate = DateAdd("d", nDay, DateSerial(2016,1,1))
MsgBox NewDate
這可以用DateAdd()
和WeekDay()
功能的組合來完成,而無需進行手工計算。
Dim year: year = 2016
Dim wn: wn = 45
Dim wd: wd = DateAdd("ww", wn, DateSerial(year,1,1))
WScript.Echo wd - WeekDay(wd, vbMonday) + 1
輸出:
07/11/2016
更新:
在5分鐘內,用最少的測試將這個在一起,似乎這樣的伎倆,但@lotpingsanswer proves在某些年份它仍然會失敗。這只是一個快速刺,他們的答案絕對是正確的使用方法。
我有weeknumber與去年..我要得到的日期07.11。 2016 – Bene
'DateAdd(「ww」,weekNumber,DateSerial(year,1,1))'會讓你關閉。 – Lankymart