openbd cfloop约会

时间:2008-11-04 18:54:15

标签: date loops coldfusion openbd cfloop

我正在尝试将我的网站从CF8转换为openBD。我在一个循环超过日期范围的网站上有一个cfloop。

本质上,我想在日期范围内每两周(步骤)向数据库插入一条新记录

我的循环看起来像这样......

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

这在CF8中完美运行,在openBD中,我收到此错误... 数据不受支持:值[11/05/09]不是数字

有关解决方法的任何想法吗?

THX

3 个答案:

答案 0 :(得分:1)

您的问题在于不从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>

限制人们在FORM中输入明确的日期格式会很有帮助,例如“yyyy-mm-dd”。

“值不是数字”错误来自于循环仍然超过数字的事实,即使您提供日期。它使用这些日期的数字表示,但它们必须有效并且可以理解它的工作原理。

答案 1 :(得分:0)

我看不到你的代码,但这是我的第一个建议:

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

HTH。

答案 2 :(得分:0)

正如Ben所说,您的代码不存在 - 您需要使用101 010图标为其创建代码块。

这是另一个应该有效的解决方案:

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