3

私はのようなmotnhsをループしようとしています。

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

ただし、2012年11月までの月のみが表示されます。2012年12月を表示するには、

#LSDateFormat(i, "MMM")#  

ループの後で再び。なにか提案を?

4

1 に答える 1

9

これは、「12-2012」が「01-12-2012」であり、31日ステップ(1か月と同じではない)を使用しているためだと思います。したがって、最後の反復では、「to」が2012年1月12日であるのに対し、2012年4月12日を探しています。この問題は次のように簡単に確認できます。

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

ほら、それはいつも月の最初の日です。

于 2012-05-22T09:09:54.030 に答える