循环几个月没有显示上个月

use*_*820 3 coldfusion

我试图循环像motnhs.

<cfloop index="i" from="05-2012" to="12-2012" step="#createTimeSpan(31, 0, 0, 0)#">
        #LSDateFormat(i, "MMM")#  
</cfloop>
Run Code Online (Sandbox Code Playgroud)

但它只显示截至2012年11月的几个月.为了显示2012年12月我必须放

#LSDateFormat(i, "MMM")#  
Run Code Online (Sandbox Code Playgroud)

循环后再次.有什么建议吗?

Ser*_*gii 9

我想这是因为"12-2012"是"01-12-2012"而你使用的是31天(与一个月不同).所以最后一次迭代正在寻找04-12-2012而你的"to"是01-12-2012.你可以很容易地看到这样的问题:

<cfloop index="i" from="05-2012" to="12-2012" step="#createTimeSpan(31, 0, 0, 0)#">
    #LSDateFormat(i)#<br/>
</cfloop>
Run Code Online (Sandbox Code Playgroud)

简单的解决方案是:

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

而且它对我来说看起来更具可读性.

请注意,如果期限较长,可能会再次出现问题.最可靠的解决方案是使跨度等于1个月,比如使用这样的东西:

<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>
Run Code Online (Sandbox Code Playgroud)

看,它总是一个月的第一天.