2012-05-22 2 views
3

Я пытаюсь зациклиться на motnhs вроде.Looping за месяцы, не отображающий последний месяц

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

но отображает месяцев только до ноября 2012 года для того, чтобы отобразить Dec 2012 я должен поставить

#LSDateFormat(i, "MMM")# 

снова после цикла. любое предложение?

ответ

9

Я предполагаю, что это потому, что «12-2012» - «01-12-2012», и вы используете 31-дневный шаг (который не совпадает с одним месяцем). Таким образом, последняя итерация ищет 04-12-2012, пока ваш «до» - это 12-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> 

Престола, это всегда первый день месяца.

+1

+1. Использование dateAdd намного надежнее. – Leigh

+0

+1 dateAdd для победы. – Nate

Смежные вопросы