0

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

本质上,我想在日期范围(从和到)的每 2 周(步骤)将新记录插入数据库

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

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

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

有什么变通的想法吗?

谢谢

4

3 回答 3

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

“值不是数字”错误来自这样一个事实,即循环仍然会遍历数字,即使您输入日期也是如此。然后,它使用这些日期的数字表示,但它们必须有效且易于理解才能起作用。

于 2008-11-05T21:47:47.807 回答
0

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

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

<cfloop index="Current" from="#parseDateTime(StartDate)#" to="#parseDateTime(EndDate)#" step="14">
    [do stuff]
</cfloop>
于 2008-11-04T23:03:13.300 回答
0

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

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

HTH。

于 2008-11-04T20:07:21.893 回答