提问人:Gene R 提问时间:11/5/2008 最后编辑:James A MohlerGene R 更新时间:5/3/2013 访问量:609
openbd cfloop 在日期上
openbd cfloop over a date
问:
我正在尝试将我的网站从 CF8 转换为 openBD。我在一个网站上有一个 cfloop,它循环了一个日期范围。
从本质上讲,我想在日期范围(从和到)的每 2 周(步长)中插入一条新记录到 db 中
我的循环看起来像这样......
<cfloop
from = "#form.startDate#"
to = "#form.endDate#"
index = "i"
step = "#theStep#"
>
这在 CF8 中完美运行,在 openBD 中,我收到此错误...... 不支持数据:值 [11/05/09] 不是数字
有什么解决方法的想法吗?
感谢
答:
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”错误来自这样一个事实,即循环仍然会遍历数字,即使你给它输入日期。然后,它使用这些日期的数字表示,但它们必须有效且易于理解才能起作用。
评论