到問題的關鍵是你的代碼期待12模4給出4,當它給出了0.
你提供的代碼已經被格式化了,幾乎沒有任何換行符,這是編寫代碼的一種愚蠢的方式,因爲它使得它很難維護(在可讀性方面,莫迪甚至簡單的修改比較),特別是當後來的開發人員必須前來了解正在發生的事情時。
請確保您使用換行符 - 特別是如果這意味着要修復其他人編寫的代碼。如果輸出空白是一個問題,那麼理想的解決方案通常是將邏輯放在一個函數中(並使用output=false
),儘管您也可以使用<cfsilent>..</cfsilent>
塊,適當放置註釋<!--- --->
和其他方法。
這裏是你的代碼轉換爲實際的東西可讀的相關部分:
<cfif "" neq stec_mysql_search_results.next_run>
0
<cfset temp_next_run = stec_mysql_search_results.next_run MOD 4>
<cfswitch expression="#temp_next_run#">
<cfcase value="1">3</cfcase>
<cfcase value="2">6</cfcase>
<cfcase value="3">9</cfcase>
<cfcase value="4">12</cfcase>
</cfswitch>
-
<cfif 4 lt stec_mysql_search_results.next_run>
#year(now())+1#
<cfelse>
#year(now())#
</cfif>
</cfif>
的0
你看到你的結果是硬編碼一個剛剛CFIF內。
由於交換機沒有0的情況下,它不輸出任何內容。
爲了使現有代碼的工作,只是改變了4 cfcase 0
然而,因爲這是處理宿舍,我不認爲你計算你的意思是什麼是。
以下是簡單地改變從4比0的cfcase會導致...
January = January
February = February
March = March
April = December
May = January
June = February
July = March
August = December
September = January
October = February
November = March
December = December
當你可能想要的東西是這樣的:
January = March
February = March
March = March
April = June
May = June
June = June
July = September
August = September
September = September
October = December
November = December
December = December
哪可以用3*ceiling(next_run/3)
簡單地完成。
如果這個假設是正確的,有一個顯著更好的方式來編寫代碼:
<td>#calculateNextRunQuarter(stec_mysql_search_results.next_run)#</td>
<cffunction name="calculateNextRunQuarter()" returntype="String" output=false>
<cfargument name="NextRunMonth" type="Numeric" required />
<cfset var Quarter = 3*ceiling(Arguments.NextRunMonth/3) />
<cfset var TheYear = Year(Now()) />
<cfif Arguments.NextRunMonth GTE 4 >
<cfset TheYear = TheYear + 1 />
</cfif>
<cfreturn Right('0'&Quarter,2) & '-' & TheYear />
</cffunction>
而且因爲邏輯是所有輸出函數內部=假沒有雜散空白和代碼仍然是完美的可讀
謝謝。我這樣做,它的工作。 – 2012-08-21 13:33:05