問題の鍵は、あなたのコードが 12 mod 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 に変更するだけです。
しかし、これは四分の一を扱っているので、あなたが何を意味するかを計算しているとは思いません。
単純に cfcase を 4 から 0 に変更すると、次のようになります...
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>
そして、ロジックはすべて output=false の関数内にあるため、迷子の空白はなく、コードは完全に読み取り可能です