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

看板Soft_Job (軟體人)作者 (olc.tw)時間13年前 (2013/04/01 23:13), 編輯推噓0(003)
留言3則, 2人參與, 最新討論串3/6 (看更多)
如果可以掛 PHP 進來...XD 就可以這樣寫: <?php $dateBegin = '2013/10/31'; $dateBeginUnix = strtotime($dateBegin); $dateNextUnix = strtotime('+1 day', $dateBeginUnix); if (date('m', $dateBeginUnix) !== date('m', $dateNextUnix)) { $theYear = date('Y', $dateBeginUnix); $theMonth = ''; switch (date('n', $dateBeginUnix)) { case '10': $theMonth = '1'; $theYear += 1; break; case '11': $theMonth = '2'; $theYear += 1; break; case '12': $theMonth = '3'; $theYear += 1; break; default: $theMonth = date('n', $dateBeginUnix) + 3; } $dateThreeMonUnix = strtotime("{$theYear}/{$theMonth}/01"); $dateThreeMonUnix = strtotime('+1 month', $dateThreeMonUnix) - 1; } else { $dateThreeMonUnix = strtotime('+3 months', $dateBeginUnix); } echo '<br />date threemonth: ' . date('Y-m-d', $dateThreeMonUnix); ※ 引述《ppking (老宅男)》之銘言: : 如有一個起的變數是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 -- kiang -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.166.136

04/01 23:17, , 1F
不過後來才看到 11/29 or 11/30 的例外狀況,殘念...
04/01 23:17, 1F

04/01 23:18, , 2F
只要加例外處理即可,但有點懶了 XD
04/01 23:18, 2F

04/02 08:52, , 3F
感謝o大依PHP語法來寫,對我們這種老一輩來講算很新的語言
04/02 08:52, 3F
文章代碼(AID): #1HMQGQ9Z (Soft_Job)
文章代碼(AID): #1HMQGQ9Z (Soft_Job)