ColdFusion の DateFormat 関数(2021 リリース)

問題

Adobe ColdFusion(2021リリース)では、DateFormat などの日付書式設定関数でマスク D を指定すると、年の通算日が返されるようになりました。下位互換性の問題を回避するため、jvm.config にフラグを追加しました。以下では、このフラグについて説明します。

動作の詳細については、次を参照してください。

解決策

JVM フラグ -Dcoldfusion.datemask.useDasdayofmonth が追加されました。デフォルトは false です。true に設定すると、マスクにD(大文字の D)が含まれている場合、マスクは値を d(小文字の d)として扱います(小文字の d はその月の何日であるかを示します)そのため、このフラグが true に設定されている場合、dateformat(now(), "mm-D-yyyy")dateformat(now(), "mm-d-yyyy") と同じになります。デフォルトでは、大文字の D はその年の何日目であるかを指定するために使用されます。

例えば、フラグが False に設定されている場合、以下のスニペットを実行すると、次の出力が返されます。

<cfscript> writeOutput(dateformat(now(), "mm-D-yyyy") & "<br/>") writeOutput(dateformat(now(), "mm-DD-yyyy") & "<br/>") </cfscript>

出力

12-337-2020
12-337-2020

大文字の D は、日付をその年の何日目で表します(最大値は 365)。

フラグが True に設定されている場合、以下のスニペットを実行すると、次の出力が返されます。

<cfscript> writeOutput(dateformat(now(), "mm-D-yyyy") & "<br/>") writeOutput(dateformat(now(), "mm-DD-yyyy") & "<br/>") </cfscript>

出力

12-2-2020
12-2-2020

修正の適用

  1. ダウンロード

    jar ファイルを CF_HOME/cfusion/lib/updates にコピーします。

  2. jvm.config ファイル(CF_HOME/cfusion/bin)で、次のフラグを True に設定します。デフォルト値は False です。

    -Dcoldfusion.datemask.useDasdayofmonth=true

  3. ColdFusion を再起動します。

  4. jar が更新されたことを確認します。ColdFusion Administrator で 「設定要約」に移動し、「CF Server Java Class Path」セクションで jar を探します。