使用cfswitch cfcase每3个月显示一次

时间:2012-08-17 16:57:41

标签: coldfusion coldfusion-7

我正在从事税务项目。税收分为几个季度。税收的月份是3月,6月,9月和12月。一旦运行我的网站显示税收将再次运行。我的问题是,在我的结果页面中,当下一个运行日期是12月而不是显示12-2012时,我得到的东西看起来像0-2012。

这是我的代码:

<td style="white-space: nowrap;">&nbsp;#stec_mysql_search_results.cover_date#&nbsp;</td>
<td style="white-space: nowrap;">&nbsp;<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>&nbsp;</td>

以下是查看来源时的输出:

<td style="white-space: nowrap;">&nbsp;07-16-2012&nbsp;</td>
<td style="white-space: nowrap;">&nbsp;0-2012&nbsp;</td>

2 个答案:

答案 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>