|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
朱育興
註冊時間: 2003-08-25 文章: 661 來自: 台中市大里區
第 1 樓
|
發表於: 星期日 十月 26, 2003 4:20 am 文章主題: [原創]自定函數-求某年某月(倒數)第幾個星期幾是幾號 |
|
|
1.這是在大陸網站回答一個問題所寫的函數。
2.既然寫了,就拿來獻醜一下。
3.為求排列美觀,空白字元是全形空白;
有興趣測試的人請自行轉為半形。
4.增加某年某月倒數第幾個星期幾是幾號
FUNCTION UGetDay
* ------------------------------------------------------------------- *
* 作者:2003.10.27 朱育興 YSC
* 功能:求某年某月(倒數)第幾個星期幾是幾號
* 語法:UGetDay(C1,N1,N2)
* 參數:1.C1 C(6) 代表西元年月,例如:200305
* 2.N1 N(2) -5 .. -1,1 .. 5
* a.其值範圍: 1 到 5,代表該月第幾個
* b.其值範圍:-1 到 -5,代表該月倒數第幾個
* 3.N2 N(1) 1 .. 7
* 代表星期幾,從 1 到 7 代表星期一,二,...,六,日
* 傳回值:N(2) 若成功,傳回天數;失敗傳回 0。
* 備註:參數值要符合規定,本函數對參數值不做檢查。
* 範例:1.? UGetDay("200310",-1,7) && 2003 年 10 月倒數第 1 個星期日
* 傳回值 = 26
* 2.? UGetDay("200310",4,7) && 2003 年 10 月第 4 個星期日
* 傳回值 = 26
* ------------------------------------------------------------------- *
LPARAMETERS L_cYYYYMM,L_nNum,L_nWeekDay
LOCAL Wo_nDay,; && N 函數的傳回值
W1_cSetDate,; && C 記錄 SET DATE TO ... 的設定值
W1_cSetCentury,; && C 記錄 SET CENTURY ... 的設定值
W1_cSetMark,; && C(1) 記錄 SET MARK TO ... 的設定值
W1_dFLDate,; && D 1.若 L_nNum > 0,代表該月的第一天
; && 2.若 L_nNum < 0,代表該月的最後一天
W1_nDiffWeek,; && N 指定的星期與 W1_dFLDate 的星期之差異數
W1_dLocalDate,; && D 所指定的星期與 W1_dFLDate 最近的日期
W1_nNum,; && N(2) 與 W1_dLocalDate 相對應的(倒數)第幾個
W1_dRealDate && D 本函數所要答案的日期值
W1_cSetDate = SET("DATE")
W1_cSetCentury = SET("CENTURY")
W1_cSetMark = SET("MARK")
SET DATE TO YMD
SET CENTURY ON
SET MARK TO "/"
Wo_nDay = 0
W1_dFLDate = CTOD(LEFT(L_cYYYYMM,4)+"/"+RIGHT(L_cYYYYMM,2)+"/01")
IF L_nNum < 0
W1_dFLDate = GOMONTH(W1_dFLDate,1) - 1
ENDIF
W1_nDiffWeek = L_nWeekDay - DOW(W1_dFLDate,2)
W1_dLocalDate = W1_dFLDate + W1_nDiffWeek
IF L_nNum < 0
W1_nNum = L_nNum + IIF(W1_nDiffWeek>0,0,1)
ELSE
W1_nNum = L_nNum + IIF(W1_nDiffWeek<0,0,-1)
ENDIF
W1_dRealDate = W1_dLocalDate + 7 * W1_nNum
IF MONTH(W1_dRealDate) = MONTH(W1_dFLDate)
Wo_nDay = DAY(W1_dRealDate)
ENDIF
SET DATE TO &W1_cSetDate
SET CENTURY &W1_cSetCentury
SET MARK TO &W1_cSetMark
RETURN Wo_nDay |
|
回頂端 |
|
|
lukapp
註冊時間: 2003-09-07 文章: 42
第 2 樓
|
發表於: 星期一 十月 27, 2003 7:01 pm 文章主題: |
|
|
? xgetday( '2003/11',4,5 ) && 4=第4星期 5 = 星期 4
***************************************************
func xgetday(xdate, xtimes,xweek )
local d1,dd,xtt
dd=set('date')
set date japan
d1=dow(ctod(xdate+'/01'))
set date (dd)
xtt=max(min(xtimes,4),1)
retu iif(xtt=1 .and.d1=xweek,1,;
iif(d1>xweek,(((8-(d1-xweek)))+((xtt-1)*7)),((xweek-d1)+1)+( xtt *7) ) ) |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|