Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ColdFusion强制变量不清楚_Coldfusion_Type Coercion - Fatal编程技术网

ColdFusion强制变量不清楚

ColdFusion强制变量不清楚,coldfusion,type-coercion,Coldfusion,Type Coercion,产出编号 但如果我把学年变量改为2011-12,结果是肯定的 ColdFusion是如何强制可变学年的?只是一个猜测。也许2011-12和2009-10被视为只有年和月的日期,所以2011年12月比2009年10月大。2012-13未被视为日期,因为它不是有效的月份 学术年的cfdump向您展示了什么?这可能不是您想要的答案,但我强烈建议,如果您要比较日期,您可以做以下两件事之一: 使用该函数。 按照Railo在其应用程序中的建议使用。 它将使您免于许多类似这样的麻烦,并使生活更轻松。您正在对两

产出编号

但如果我把学年变量改为2011-12,结果是肯定的


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--->