openbd cfloop на свидание - PullRequest
       18

openbd cfloop на свидание

0 голосов
/ 04 ноября 2008

Я пытаюсь конвертировать свои сайты из CF8 в openBD. У меня есть cfloop на сайте, который зацикливается на диапазон дат.

По сути, я хочу вставлять новую запись в базу данных каждые 2 недели (шаг) диапазона дат (от и до)

моя петля выглядит так ...

<cfloop 
  from  = "#form.startDate#" 
  to    = "#form.endDate#" 
  index = "i" 
  step  = "#theStep#"
>

Это отлично работает в CF8, в openBD, я получаю эту ошибку ... Данные не поддерживаются: значение [11/05/09] не является числом

Есть идеи обойтись?

Thx

Ответы [ 3 ]

1 голос
/ 06 ноября 2008

Ваша проблема заключается в том, что вы не проверяете неоднозначные строки даты, зависящие от локали, из вашей ФОРМЫ.

Более надежная версия будет такой:

<cfset SetLocale("English (US)")> <!--- set expected input locale here --->

<cfif LSIsDate(form.startDate) and LSIsDate(form.endDate)>
  <cfset theStep = 14>

  <cfloop 
    from  = "#LSParseDate(form.startDate)#" 
    to    = "#LSParseDate(form.endDate)#" 
    index = "i" 
    step  = "#theStep#"
  >
    <!--- do stuff --->
  </cfloop>
<cfelse>
  <!--- output some error message --->
</cfif>

Было бы полезно ограничить людей вводом в ФОРМУ однозначных форматов даты, таких как "гггг-мм-дд".

Ошибка «значение не является числом» происходит из-за того, что цикл по-прежнему перебирает числа, даже если вы передаете ему даты. Тогда он использует числовое представление этих дат, но они должны быть действительными и понятными, чтобы это работало.

0 голосов
/ 05 ноября 2008

Как говорит Бен, вашего кода там нет - вам нужно использовать значок 101 010, чтобы создать для него блок кода.

Вот еще одно решение, которое должно работать:

<cfloop index="Current" from="#parseDateTime(StartDate)#" to="#parseDateTime(EndDate)#" step="14">
    [do stuff]
</cfloop>
0 голосов
/ 04 ноября 2008

Я не вижу ваш код, но вот мое первое предложение:

<cfset current = [your begin date]>
<cfloop condition = "datecompare(enddate, current)">
  [do stuff]
  <cfset current = dateadd('d', 14, current)>
</cfloop>

НТН.

...