Share via


嗨,Scripting Guy!

嗨,Scripting Guy!

歡迎使用 TechNet 專欄,Microsoft Scripting Guys 會在此為您解答有關系統管理指令碼的常見問題。您有關於系統管理指令碼方面的問題嗎?請將電子郵件傳送到 scripter@microsoft.com。我們無法保證能夠逐一回答每個問題,不過我們會盡力而為。

還有,別忘了瞧瞧全新經過改良的嗨,Scripting Guy!過往文件

今天的問題:如何確定某特定週內星期五的日期?


如何確定某特定週內星期五的日期?

嗨,Scripting Guy!如果指定一個日期,指令碼可以指出該週內星期五的日期嗎?

-- DLR

DLR,您好。可惜您不是問星期六、星期日和假日的日期,因為巧的是,每個 Scripting Guy 都記得我們不用上班的所有日子,而且提前好幾年就記得。但要是提到像是星期五的工作天,我們通常不太行。

不過沒關係:我們不需要知道每個星期五的日期,因為有指令碼可以幫忙找出來。事實上,這裡有個指令碼可以在指定日期後,回報該週的星期五所在的日期:

dtmDate = #6/23/2005#
intDay = WeekDay(dtmDate)
intAdder = 6 - intDay
dtmFriday = dtmDate + intAdder
Wscript.Echo dtmFriday

這麼小段的指令碼何以成就這麼不可思議的大功呢?讓我們看看有沒有辦法找出原因。指令碼先是將日期 6/23/2005 (2005 年 6 月 23 日) 指派給一個名為 dtmDate 的變數。請注意,加不加井字號 (#) 都無所謂,還可以改用雙引號來括住日期。不過使用井字號可確保 VBScript 將該值解譯為日期,而不會解譯成其他東西。

接下來使用 WeekDay 函式來確定 2005 年 6 月 23 日當週的日子 (順便一提,是星期四)。WeekDay 會傳回下列其中一個值:


常數 說明
vbSunday 1 星期日
vbMonday 2 星期一
vbTuesday 3 星期二
vbWednesday 4 星期三
vbThursday 5 星期四
vbFriday 6 星期五
vbSaturday 7 星期六


注意:上表,還有我們剛剛展示的指令碼,都假設星期日是一週的第一天。

這給我們一個代表一週各天的值,在本例中,我們會得到一個 5,指出 2005 年 6 月 23 日是落在星期四。現在要做的是,透過程式設計的方式決定這一天跟該週的星期五之間的天數。這可以透過一行程式碼辦到:

intAdder = 6 - intDay

有點困惑嗎?不要困惑,這實際上很合理。如果您參考上表,就會看到星期五有個 6 的值,假使我們星期五的值 (6) 減去星期似的值 (5) 就會得到 1,猜怎麼著?如果在 2005 年 6 月 23 日加上一天,就會得到該週星期五的日期:2005 年 6 月 24 日。這正是以這一行程式碼所進行的動作:

dtmFriday = dtmDate + intAdder

看到它是怎麼運作的吧?事實上,這個簡單的小小方程式甚至還可以用於星期六。假設我們要查 2005 年 6 月 25 日的日期,剛好是星期六 (而且有個 WeekDay 為 7 的值)。方程式就會變成:

intAdder = 6 - 7

您相當清楚 6 – 7 等於 -1,從 2005 年 6 月 25 日減一天,您會得到 2005 年 6 月 24 日,這是星期五。很精明,對吧!

順便一提,日期和日期算術有各種新酷的把戲可以玩,如需詳細資訊,請參考《Microsoft Windows 2000 Scripting Guide》中的<VBScript Primer> (英文) 一章。

對於 Scripting Guy 來說,有指令碼可以指出星期五或星期六或星期日所在的日期是很不錯,可是這怎麼夠呢,我們打算寫一個指令碼可以將任何指定的日子變成星期六 (剛好我們星期六都放假)。如果您突然間發現《嗨,Scripting Guy!》專欄 (星期六不發行) 不見了,就知道我們成功了。

不過,根據我們初次調查的情況看來,您不難想像明天就會看到新的專欄,一如往常 (結論是,這比我們希望的還要艱難)。


如需詳細資訊

查看嗨,Scripting Guy!- 過往文件

 

回到頁首 回到頁首