<cfset academic_year = "2012-13">
<cfoutput># academic_year gt "2009-10" #</cfoutput>
出力なし
しかし、academic_year VARIABLE を "2011-12" に変更すると、出力は YES になります。
ColdFusion はどのように可変学年を強制していますか?
<cfset academic_year = "2012-13">
<cfoutput># academic_year gt "2009-10" #</cfoutput>
出力なし
しかし、academic_year VARIABLE を "2011-12" に変更すると、出力は YES になります。
ColdFusion はどのように可変学年を強制していますか?
ただの推測。おそらく、「2011-12」と「2009-10」は年と月だけの日付として扱われているため、2011年12月は2009年10月よりも大きくなります。「2012-13」は有効ではないため、日付として扱われていません。月。
on Academic_yearは何cfdump
を示していますか?
これはおそらくあなたが探している答えではありませんが、日付を比較する場合は、次の 2 つのいずれかを行うことを強くお勧めします。
parseDateTime()
Railo が互換性ガイドで提案しているように使用してください。このような多くの頭痛からあなたを救い、生活を楽にします。
「yyyy-mm」の日付のように見えますが、実際には「yyyy-yy」の文字列である2つの文字列を比較しています。日付比較の代わりに文字列比較を実行したいので、ColdFusionに意図を推測させる代わりに、明示的な文字列比較関数を使用する必要があります。関数はあなたのCompare
ためにこのタスクを実行します。
<cfset academic_year = "2012-13">
<cfoutput>#Compare(academic_year, "2009-10")#</cfoutput>
何らかの理由でまだGT構文を使用したい場合は、を使用Val
して2年の文字列を1年の文字列に変換できます。
<cfoutput># Val("2012-13") gt Val("2009-10") #</cfoutput>
として扱われます:
<cfoutput># "2012" gt "2009" #</cfoutput>
それがどのように機能するかについては、 Valのドキュメントを参照してください。
2番目のものは両側を日付にキャストしただけであることは明らかです(間違っていますが、それでも... CFはそのように「役立ちます」)ので、答えは「正しい」です。
LHSは日付として解釈できないため、日付比較を行うことができないため、最初の式が「NO」になった理由にもっと興味がありました。したがって、文字列比較を行う必要があり、「2012-13」は「2009-10」よりも大きいため、答えは「いいえ」ではなく「はい」である必要があります。
だから掘った。このコードをチェックしてください:
<!--- 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--->
どちらも「2012-13」と「2009-10」を比較していることに注意してください。
なぜこれを行うのですか?なぜなら...逆コンパイルされたコードを正しく読んでいれば... CFは最初の式のリテラル「2009-10」を日付(2009年10月1日)として扱います...そして、それを比較する必要があることを確認します文字列(「2012-13」は日付にキャストできません)、日付「2009年10月1日」を文字列(「40087」... 1899年12月31日から10月1日までの日数)に変換するようです、2009)。また、文字列比較を行うと、「2012-13」は「40087 未満」です。
リテラル.cfm の逆コンパイルされたコードのどこにも「2009-10」は存在しません。唯一の参照は「40087.0D」です。そのため、CF は、明らかに文字列 (引用符で囲まれているなど) であるにもかかわらず、「2009-10」を見て、日付として使用できない式にハードコードされているにもかかわらず、「ええ、それは日付です」と言いました。 . はぁ。
とにかく、それがあなたが見ているものを見ている理由です。