我正在从事税务项目。税收分为几个季度。税收的月份是3月,6月,9月和12月。一旦运行我的网站显示税收将再次运行。我的问题是,在我的结果页面中,当下一个运行日期是12月而不是显示12-2012时,我得到的东西看起来像0-2012。
这是我的代码:
<td style="white-space: nowrap;"> #stec_mysql_search_results.cover_date# </td>
<td style="white-space: nowrap;"> <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> </td>
以下是查看来源时的输出:
<td style="white-space: nowrap;"> 07-16-2012 </td>
<td style="white-space: nowrap;"> 0-2012 </td>
答案 0 :(得分:3)
问题的关键是你的代码期望12 mod 4给4,当它给0时。
您提供的代码已被格式化,几乎没有任何换行符,这是一种编写代码的愚蠢方式,因为它使维护非常困难(在可读性,修改,甚至简单的修订比较方面)特别是当后来的开发人员必须出现并了解正在发生的事情时。
确保使用换行符 - 特别是如果这意味着修复其他人编写的代码。如果空格的输出是一个问题,那么理想的解决方案通常是将逻辑放在一个函数中(并使用output=false
),尽管你也可以使用<cfsilent>..</cfsilent>
块,适当放置注释{{1}等等。
以下是将代码的相关部分翻译成实际可读的内容:
<!--- --->
您在结果中看到的<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>
是在cfif内部的硬编码。
因为开关没有0的情况,所以没有输出任何东西。
要使现有代码有效,只需将cfcase更改为4。
然而,因为这是处理宿舍,我不认为你在计算你的意思。
以下简单地将cfcase从4更改为0将导致...
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)
因为逻辑全部在一个带有output = false的函数内部,所以没有杂散的空格,代码仍然是完全可读的
答案 1 :(得分:2)
cfcase会接受一个列表,也许你已经过度复杂了,为什么不这样做:
<cfswitch expression="#stec_mysql_search_results.next_run#">
<cfcase value="1,2,3">3</cfcase>
<cfcase value="4,5,6">6</cfcase>
<cfcase value="7,8,9">9</cfcase>
<cfcase value="10,11,12">12</cfcase>
</cfswitch>