[請益] 請教高手要加3個月的程式寫法

看板Soft_Job作者 (老宅男)時間11年前 (2013/04/01 15:31), 編輯推噓7(7048)
留言55則, 15人參與, 最新討論串1/6 (看更多)
如有一個起的變數是2013/04/01 則迄的值就為2013/07/01 但如遇到2013/03/31 則迄的值就要為2013/06/30 目前遇到困擾是31日及2月底日期的判斷 造成程式寫法要寫很多if寫法 不知各位高手有沒有比較簡單的寫法 就可寫出 謝謝 IF MONTH(s_date) >= 10 THEN LET e_date=MDY(MONTH(s_date)-9,DAY(s_date),YEAR(s_date)+1) ELSE LET e_date=MDY(MONTH(s_date)+3,DAY(s_date),YEAR(s_date)) END IF IF e_date IS NULL THEN IF MONTH(s_date) >= 9 THEN LET e_date=MDY(MONTH(s_date)-8,DAY(s_date),YEAR(s_date)+1) ELSE LET e_date=MDY(MONTH(s_date)+4,DAY(s_date),YEAR(s_date)) END IF LET e_date = MDY(MONTH(e_date),1,YEAR(e_date)) - 1 END IF -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.22.197.149

04/01 15:32, , 1F
你用什麼語言
04/01 15:32, 1F

04/01 15:34, , 2F
古老的4gl語言
04/01 15:34, 2F

04/01 15:46, , 3F
弄成長度365的陣列 index+90 XDDD
04/01 15:46, 3F

04/01 15:46, , 4F
switch case?
04/01 15:46, 4F

04/01 15:46, , 5F
原來不是固定天數 (默..
04/01 15:46, 5F

04/01 15:54, , 6F
用函式:函式名稱:cl_days
04/01 15:54, 6F

04/01 16:02, , 7F
s大,此語言並無cl_day上函數可用,謝謝
04/01 16:02, 7F

04/01 16:19, , 8F
4GL的語言那麼多~PowerBuilder、Delphi和INFORMOX
04/01 16:19, 8F

04/01 16:19, , 9F
請問你用的是哪一種呢?0.0?
04/01 16:19, 9F

04/01 16:29, , 10F
Informix,有mdy(),day(),month(),year()相關日期函數可用
04/01 16:29, 10F

04/01 16:31, , 11F
我目前寫如下,感覺還是不怎麼好:
04/01 16:31, 11F

04/01 16:31, , 12F
IF MONTH(s_date) >= 10 THEN
04/01 16:31, 12F

04/01 16:32, , 13F
LET e_date=MDY(MONTH(s_date)-9,DAY(s_date),YEAR(s_d)+1)
04/01 16:32, 13F

04/01 16:32, , 14F
ELSE
04/01 16:32, 14F

04/01 16:33, , 15F
LET e_date=MDY(MONTH(s_date)+3,DAY(s_date),YEAR(s_dat))
04/01 16:33, 15F

04/01 16:33, , 16F
END IF
04/01 16:33, 16F

04/01 16:34, , 17F
IF e_date IS NULL THEN
04/01 16:34, 17F

04/01 16:34, , 18F
IF MONTH(s_date) >= 9 THEN
04/01 16:34, 18F

04/01 16:35, , 19F
LET e_date=MDY(MONTH(s_date)-8,DAY(s_date),YEAR(s_d)+1)
04/01 16:35, 19F

04/01 16:35, , 20F
ELSE
04/01 16:35, 20F

04/01 16:35, , 21F
LET e_date=MDY(MONTH(s_date)+4,DAY(s_date),YEAR(s_dat))
04/01 16:35, 21F

04/01 16:36, , 22F
END IF
04/01 16:36, 22F

04/01 16:36, , 23F
LET e_date = MDY(MONTH(e_date),1,YEAR(e_date)) - 1
04/01 16:36, 23F

04/01 16:36, , 24F
END IF
04/01 16:36, 24F

04/01 16:37, , 25F
你可以修改文章~不用推文~orz~~~OTZ~~~ORZ
04/01 16:37, 25F

04/01 17:39, , 26F
有日期檢核的函數嗎?!有的話月份+3後檢核該日,不合理
04/01 17:39, 26F

04/01 17:39, , 27F
-1日再檢核一次直到日期檢核正確
04/01 17:39, 27F

04/01 17:47, , 28F
沒有日期檢核函數,它直接丟給null值
04/01 17:47, 28F

04/01 17:52, , 29F
對喔,忘了可直接改文章內容即可,不好意思
04/01 17:52, 29F

04/01 20:02, , 30F
while迴圈每次-1DAY直MDY到回傳值不為null?
04/01 20:02, 30F

04/01 20:48, , 31F
樓上a大,腦中默跑你的方法,覺得很難捉到3月後同日期
04/01 20:48, 31F
※ 編輯: ppking 來自: 36.236.34.149 (04/01 20:53) ※ 編輯: ppking 來自: 36.236.34.149 (04/01 20:58)

04/01 21:08, , 32F
一般老系統這類客製的日期處理函數應該是不用自己造輪子吧?
04/01 21:08, 32F

04/01 21:12, , 33F
我是製造業的MIS,公司用的ERP是自己寫出來,此段是用於報表
04/01 21:12, 33F

04/01 21:13, , 34F
程式,預設輸入起迄日期條件是3個月
04/01 21:13, 34F

04/01 21:48, , 35F
3/1~6/1, 3/31~6/30 嗎? 那 31天要怎麼 mapping 到 30天?
04/01 21:48, 35F

04/01 22:52, , 36F
2/28加三個月是要5/28 or 5/31 ??
04/01 22:52, 36F

04/02 00:44, , 37F
mm=(old_mm+3)%12; yy+=(old_mm+3)/12; 再檢查一下dd>30
04/02 00:44, 37F

04/02 00:46, , 38F
還有mm==2 時的狀況....
04/02 00:46, 38F

04/02 00:56, , 39F
mm=9, (9+3) % 12 = 0 喔
04/02 00:56, 39F

04/02 02:13, , 40F
好奇怪的需求 一般是抓月第一天或最後一天 不然就用90天算!
04/02 02:13, 40F

04/02 02:19, , 41F
想問一下,Informix的ADD_MONTHS不能用嗎?
04/02 02:19, 41F

04/02 08:04, , 42F
老闆要的三個月是以月為基礎算還是以日(90日)為基礎?
04/02 08:04, 42F

04/02 08:04, , 43F
另外是不另外寫個判斷閏年,卻想要簡單寫出來,很奇怪唷
04/02 08:04, 43F

04/02 08:41, , 44F
老闆是要以月為基礎,而2/28加3個月就為5/28,因傳統製造業的
04/02 08:41, 44F

04/02 08:43, , 45F
老闆都很單純,加3個月就是月份加3,月份內天數變化如28,29,
04/02 08:43, 45F

04/02 08:45, , 46F
30,31,他認為電腦就會排除不正確的日期
04/02 08:45, 46F

04/02 08:47, , 47F
樓上l大,沒用過Informix的ADD_MONTHS函數,如何使用?
04/02 08:47, 47F

04/02 08:49, , 48F
樓上lovdkkkk大,的確是如起3/31,則迄就要為6/30
04/02 08:49, 48F

04/02 11:32, , 49F
那假如是1/31過三個月就自動是4/30對嗎?
04/02 11:32, 49F

04/02 12:09, , 50F
MDY(MONTH(sd),DAY(sd),YEAR(sd)) + 3 UNITS MONTH行嗎?
04/02 12:09, 50F

04/02 12:47, , 51F
先寫一個function輸入年、月,輸出該月的最後一天,會較簡單
04/02 12:47, 51F

04/02 12:50, , 52F
算出來的該月最後一日再跟原先的日取MINIMUM
04/02 12:50, 52F

04/02 12:51, , 53F
至於這個function只需考慮二月閏年的情形,其他都固定
04/02 12:51, 53F

04/02 12:53, , 54F
然後四年一閏,逢百不閏,逢四百要閏->先判斷400倍數->100..
04/02 12:53, 54F

04/06 17:23, , 55F
條件區間不要用[<=第三月底],用[<第四月第一天]
04/06 17:23, 55F
文章代碼(AID): #1HMJVdFw (Soft_Job)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 6 篇):
文章代碼(AID): #1HMJVdFw (Soft_Job)