我正在尝试将我的网站从CF8转换为openBD。我在一个循环超过日期范围的网站上有一个cfloop。
本质上,我想在日期范围内每两周(步骤)向数据库插入一条新记录
我的循环看起来像这样......
<cfloop
from = "#form.startDate#"
to = "#form.endDate#"
index = "i"
step = "#theStep#"
>
这在CF8中完美运行,在openBD中,我收到此错误... 数据不受支持:值[11/05/09]不是数字
有关解决方法的任何想法吗?
THX
答案 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>