Coldfusion 循环数月,不显示上个月

Coldfusion 循环数月,不显示上个月,coldfusion,Coldfusion,我正试着像这样绕着莫特家转 <cfloop index="i" from="05-2012" to="12-2012" step="#createTimeSpan(31, 0, 0, 0)#"> #LSDateFormat(i, "MMM")# </cfloop> 循环结束后再重复。有什么建议吗?我想这是因为“12-2012”是“01-12-2012”,您使用的是31天步骤(与一个月不同)。所以最后一次迭代是寻找2012年12月4日,而你的“目标”是

我正试着像这样绕着莫特家转

<cfloop index="i" from="05-2012" to="12-2012" step="#createTimeSpan(31, 0, 0, 0)#">
        #LSDateFormat(i, "MMM")#  
</cfloop>
循环结束后再重复。有什么建议吗?

我想这是因为“12-2012”是“01-12-2012”,您使用的是31天步骤(与一个月不同)。所以最后一次迭代是寻找2012年12月4日,而你的“目标”是2012年12月1日。您可以很容易地看到这样的问题:

<cfloop index="i" from="05-2012" to="12-2012" step="#createTimeSpan(31, 0, 0, 0)#">
    #LSDateFormat(i)#<br/>
</cfloop>
<cfset i = CreateDate(2012, 5, 1) />
<cfset stop = CreateDate(2012, 12, 31) />
<cfloop condition="i LTE stop">
    #LSDateFormat(i)#<br/>
    <cfset i = DateAdd("m",1,i)>
</cfloop>

#LSDateFormat(i)#
简单的解决办法是:

<cfloop index="i" from="#CreateDate(2012, 5, 1)#" to="#CreateDate(2012, 12, 31)#" step="#CreateTimeSpan(31, 0, 0, 0)#">
    #LSDateFormat(i)#<br/>
</cfloop>

#LSDateFormat(i)#
另外,对我来说,它看起来更有可读性

请注意,如果时间较长,问题可能会再次出现。最可靠的解决方案是使跨度等于1个月,比如说,使用如下方式:

<cfloop index="i" from="05-2012" to="12-2012" step="#createTimeSpan(31, 0, 0, 0)#">
    #LSDateFormat(i)#<br/>
</cfloop>
<cfset i = CreateDate(2012, 5, 1) />
<cfset stop = CreateDate(2012, 12, 31) />
<cfloop condition="i LTE stop">
    #LSDateFormat(i)#<br/>
    <cfset i = DateAdd("m",1,i)>
</cfloop>

#LSDateFormat(i)#
看,这总是一个月的第一天