我正在尝试将我的网站从CF8转换为openBD。我在一个站点中有一个循环遍历日期范围的cfloop。
实际上,我希望在一个日期范围(从和到)中每两周(步骤)向数据库中插入一条新记录。
我的循环看起来像这样。
<cfloop
from = "#form.startDate#"
to = "#form.endDate#"
index = "i"
step = "#theStep#"
>这在CF8中工作得很好,在openBD中,我得到这个错误...不支持数据:值11/05/09不是数字
有什么工作的想法吗?
Thx
发布于 2008-11-05 21:47:48
您的问题在于没有从表单中检查不明确的依赖于区域设置的日期字符串。
一个更健壮的版本应该是:
<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“错误来自这样一个事实:即使您向循环提供日期,它仍然会遍历数字。它使用这些日期的数字表示,但它们必须是有效的和可理解的,才能工作。
发布于 2008-11-04 20:07:22
我看不到你的代码,但这是我的第一个建议:
<cfset current = [your begin date]>
<cfloop condition = "datecompare(enddate, current)">
[do stuff]
<cfset current = dateadd('d', 14, current)>
</cfloop>HTH。
发布于 2008-11-04 23:03:13
正如Ben所说,您的代码不在那里-您需要使用101010图标为其创建一个代码块。
这里有另一个解决方案,它应该是有效的:
<cfloop index="Current" from="#parseDateTime(StartDate)#" to="#parseDateTime(EndDate)#" step="14">
[do stuff]
</cfloop>https://stackoverflow.com/questions/262940
复制相似问题