我猜这是因为“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>
简单的解决方案是这样的:
<cfloop index="i" from="#CreateDate(2012, 5, 1)#" to="#CreateDate(2012, 12, 31)#" step="#CreateTimeSpan(31, 0, 0, 0)#">
#LSDateFormat(i)#<br/>
</cfloop>
另外,它看起来对我来说更具可读性。
请注意,如果周期较长,问题可能会再次出现。最可靠的解决方案是使跨度等于 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>
看,它总是每月的第一天。