dateCompare関数について

DateCompare関数を使用すると、1つ目と2つ目の引数に指定した「日付/時刻オブジェクト」を比較し、一致したら0、不一致の場合は-1 か 1が返されます。3つ目の引数には比較を行う精度となり、省略時のデフォルトは s(秒)になっていました。(DateCompare (adobe.com)

しかし、ColdFusion 2016のDateCompare関数には不具合があり、3つ目の引数を省略した場合と、3つ目の引数にsを指定した場合、つまり、本来は同じ精度で測定するので結果が同じになるはずですが、結果が異なる場合がありました。この不具合は、ColdFusion 2018で修正されています。

CF-4198661 Date.compare doesn't work same as dateCompare

ColdFusion 2018で修正されたことによって、ColdFusion 2018以降のDateCompare関数の実行結果が従来と異なる可能性があります。3つ目の引数を省略した際のDateCompareの処理に問題があったため、修正された後の結果が本来の正しい動作となります。

ただ、見た目に判断が難しい動作もあります。特に、1つ目と2つ目の引数に”数字”を指定した際です。引数に数値が渡された際は、その数値をOLEオートメーション日付の概念を使用して計算します。そのため、そこから導き出される値は、正の値だけでなく負の値になる場合があるため、「数値が大きい=後の日付」にはなりません。もし、記号を使っていない yyyymmdd形式で日付を指定している場合は、DateCompareの結果が1となったり-1となったりしますので注意してください。もし、yyyymmddを日付として処理したい場合は、yyyy/mm/ddの文字列の表記にして戻す必要があります。ColdFusionの標準の関数には用意されていませんが、下記の一般ユーザーが紹介しているユーザー定義関数(DateUnHash)などを使用するか参考にしてください。

https://gist.github.com/JamoCA/8961085

 


 


記事公開日:2021年09月07日
最終更新日:2021年09月07日


x

Sample Modal Window

This is just a sample…

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent suscipit iaculis libero sed tristique. Quisque mollis dolor non tellus placerat vitae sodales lectus porta. Curabitur ut suscipit tellus. Maecenas rhoncus, ante vitae vehicula vestibulum, metus sapien dapibus tellus, et mattis dolor neque vitae nisl. Nullam eleifend ultrices ipsum eget pretium. Curabitur semper metus ut ante adipiscing nec volutpat sem rutrum. Nullam a nisi lacus, non interdum ante. Vivamus ante augue, commodo vel egestas sed, pharetra nec dui. Quisque sed tellus felis. Donec ipsum mauris, sagittis eu accumsan in, aliquam non ipsum.

Vestibulum tempor nunc nec felis scelerisque eget elementum erat dignissim. Ut vel ipsum mollis orci venenatis luctus. Aenean vehicula quam vel quam porttitor ac iaculis elit pulvinar. Proin consequat, ipsum eu venenatis semper, justo turpis posuere tortor, ac placerat metus nisl et lectus. Nulla cursus dui id nunc ullamcorper sed semper nisl lobortis. Aliquam erat volutpat. Phasellus arcu ante, imperdiet in ornare sed, laoreet eu massa.