我想在用户提交表单后验证日期参数。我的应用程序在ColdFusion 9上运行,并且很少有内置函数,如isDate()
,但即使对于某些时髦的日期值,此函数也会返回true。我已经采用这种方式来验证我的日期参数:
<cfarguments name="myDate" type="string" required="true">
<cfset getMonth = Month(myDate)>
<cfset getDay = Day(myDate)>
<cfset getYear = Year(myDate)>
<cfif getMonth LT 1 OR getMonth GT 12>
<cfset message = "Month value should be in a range between 1 and 12.">
<cfelseif getDay LT 1 OR getDay GT 31>
<cfset message = "Day value should be in a range btween 1 and 31.">
<cfelseif ((getMonth EQ 4 OR getMonth EQ 6 OR getMonth EQ 9 OR getMonth EQ 11) AND getDay EQ 31)>
<cfset message = "Month of April, June, September and November have 30 days.">
<cfelseif getMonth EQ 2>
<cfset isLeap = (getYear MOD 4 AND (getYear MOD 100 NEQ 0 OR getYear MOD 400 EQ 0))>
<cfif (getDay GT 29 OR (getDay EQ 29 AND NOT isLeap))>
<cfset message = "Only leap year can have 29 days.">
</cfif>
</cfif>
我想知道这种验证日期的方式是否有问题?我试图将日期分为日,月和年。然后我检查每一个是否在正确的范围内。我不确定是否还有其他我应该寻找的东西。我在我的应用中使用美国日期格式mm / dd / yyyy。如果有人有任何建议,请告诉我。谢谢。
答案 0 :(得分:1)
这是您应该在服务器端检查的其他内容。这段代码:
writeoutput (dateformat("Apr 31", "yyyy-mm-dd"));
返回1931-04-01。这是一个完全有效的日期,可以通过您问题中的每个测试。你做什么取决于1931年是否适用于你的申请。
要考虑的其他因素是,如果像&#34; fred&#34;提交后,您的第一个命令<cfset getMonth = Month(myDate)>
将抛出错误。这样做会使你正在尝试的其余部分变得不必要。
你可能会考虑的事情是:
<cfinput mask="something">
。请注意,这个选项很烦人
如果您预填充该字段。我个人使用指令的组合,预填充输入,<cfinput validate="date">
,以及几年前我写的一些自定义标签,只使用isDate()。它并不完美,但它完成了工作。