Openbd cfloop над датой

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

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

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

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

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

Любые идеи работы?

Спасибо

Пожалуйста, поместите свой кодовый блок в ... мм ... кодовый блок. Таким образом, он будет отображаться правильно.

Ben Doom 04.11.2008 23:05

Переформатировал код, чтобы он стал видимым.

Tomalak 06.11.2008 00:54
Работа с датами и временем в языке Java
Работа с датами и временем в языке Java
Работа с датами и временем в языке Java была сильно переработана начиная с версии Java 8 и далее с появлением библиотеки java.time.
0
2
591
3

Ответы 3

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

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

HTH.

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

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

<cfloop index = "Current" from = "#parseDateTime(StartDate)#" to = "#parseDateTime(EndDate)#" step = "14">
    [do stuff]
</cfloop>

Я подозреваю, что это то, что он делает, но не могу сказать наверняка. Мне кажется, что такой зацикливание на дате - это то, что можно было не использовать в OpenBD. Но это всего лишь внутреннее ощущение, пока он не раскроет свой код.

Ben Doom 05.11.2008 19:38

Ваша проблема заключается в том, что вы не проверяете в FORM неоднозначные строки даты, зависящие от локали.

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

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

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

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

Другие вопросы по теме