openbd cfloop 在日期上

openbd cfloop over a date

提问人:Gene R 提问时间:11/5/2008 最后编辑:James A MohlerGene R 更新时间:5/3/2013 访问量:609

问:

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

从本质上讲,我想在日期范围(从和到)的每 2 周(步长)中插入一条新记录到 db 中

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

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

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

有什么解决方法的想法吗?

感谢

日期 循环 ColdFusion(冷融合酒店 OpenBD的 cfloop

评论

0赞 Ben Doom 11/5/2008
请将您的代码块放在...嗯......代码块。这样,它将正确显示。
0赞 Tomalak 11/6/2008
重新设置了代码的格式,使其可见。

答:

0赞 Ben Doom 11/5/2008 #1

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

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

HTH。

0赞 Peter Boughton 11/5/2008 #2

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

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

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

评论

0赞 Ben Doom 11/6/2008
我怀疑这就是他正在做的事情,但我不能确定。在我看来,以这种方式循环约会可能是 OpenBD 遗漏的东西。但这只是一种直觉,直到他暴露了他的代码。
1赞 Tomalak 11/6/2008 #3

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

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

“value is not a number”错误来自这样一个事实,即循环仍然会遍历数字,即使你给它输入日期。然后,它使用这些日期的数字表示,但它们必须有效且易于理解才能起作用。