ColdFusion强制变量不清楚
产出编号 但如果我把学年变量改为2011-12,结果是肯定的ColdFusion强制变量不清楚,coldfusion,type-coercion,Coldfusion,Type Coercion,产出编号 但如果我把学年变量改为2011-12,结果是肯定的 ColdFusion是如何强制可变学年的?只是一个猜测。也许2011-12和2009-10被视为只有年和月的日期,所以2011年12月比2009年10月大。2012-13未被视为日期,因为它不是有效的月份 学术年的cfdump向您展示了什么?这可能不是您想要的答案,但我强烈建议,如果您要比较日期,您可以做以下两件事之一: 使用该函数。 按照Railo在其应用程序中的建议使用。 它将使您免于许多类似这样的麻烦,并使生活更轻松。您正在对两
ColdFusion是如何强制可变学年的?只是一个猜测。也许2011-12和2009-10被视为只有年和月的日期,所以2011年12月比2009年10月大。2012-13未被视为日期,因为它不是有效的月份
学术年的cfdump向您展示了什么?这可能不是您想要的答案,但我强烈建议,如果您要比较日期,您可以做以下两件事之一: 使用该函数。 按照Railo在其应用程序中的建议使用。
它将使您免于许多类似这样的麻烦,并使生活更轻松。您正在对两个看起来像yyyy-mm日期但实际上是yyyy-yy字符串的字符串进行比较。您希望进行字符串比较而不是日期比较,因此需要使用显式字符串比较函数,而不是让ColdFusion推断您的意图。比较功能将为您完成此任务
<cfset academic_year = "2012-13">
<cfoutput># academic_year gt "2009-10" #</cfoutput>
被视为:
<cfoutput># Val("2012-13") gt Val("2009-10") #</cfoutput>
看看它是如何工作的。很明显,第二个版本只是将双方的日期都选错了,但仍然。。。CF是有帮助的,所以答案是正确的 我更感兴趣的是,为什么你的第一个表达式会导致“不”,因为它不能进行日期比较,因为LHS不能解释为日期。所以它应该做一个字符串比较,2012-13比2009-10大,所以答案应该是是不是 所以我挖了。请查看以下代码:
<cfoutput># "2012" gt "2009" #</cfoutput>
注意,他们都在比较2012-13年和2009-10年
为什么会这样?因为如果我正确读取反编译代码。。。CF将第一个表达式中的文字2009-10视为日期2009年10月1日。。。然后看到它需要与字符串2012-13进行比较,不能转换为日期,并且似乎将日期2009年10月1日转换回字符串40087。。。1899年12月31日至2009年10月1日之间的天数。进行字符串比较时,2012-13小于40087
在literal.cfm的反编译代码中不存在2009-10。唯一的参考是40087.0D。所以CF看了看2009-10,尽管很明显是一个字符串,在它周围加了引号,等等,然后说是的,这是一个日期,尽管它硬编码成一个表达式,不能用作日期。唉
所以,不管怎样,这就是为什么你看到了你所看到的。你使用的是什么版本的CF?我在CF9和CF10beta上都试过,两次的评估结果都是否定的。应该是alphaneric比较,但它看起来像是在评估你的var。你确定你没有像中那样设置没有引号的学年吗?事实上,没有,我错了:variable.cfm实际上只是在两次上进行字符串比较。但是literal.cfm的解释仍然有效。
<cfoutput># "2012" gt "2009" #</cfoutput>
<!--- literal.cfm --->
<cfset var1 = "2012-13">
<cfoutput>#var1 GT "2009-10"#</cfoutput><!--- this outputs: NO --->
<!--- variable.cfm --->
<cfset var1 = "2012-13">
<cfset var2 = "2009-10">
<cfoutput>#var1 GT var2#</cfoutput><!--- this outputs: YES--->