Ваша проблема заключается в том, что вы не проверяете неоднозначные строки даты, зависящие от локали, из вашей ФОРМЫ.
Более надежная версия будет такой:
<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>
Было бы полезно ограничить людей вводом в ФОРМУ однозначных форматов даты, таких как "гггг-мм-дд".
Ошибка «значение не является числом» происходит из-за того, что цикл по-прежнему перебирает числа, даже если вы передаете ему даты. Тогда он использует числовое представление этих дат, но они должны быть действительными и понятными, чтобы это работало.