2008/02/05

文字列のまま日付を追加してくれるDateAddtoString

以前、先輩社員と一緒に帰るときに、CFのDateAdd関数の引数(3番目)が、文字列型ではなく日付型で、開発時に、日付を文字列として処理してしまっているので、このような仕様だと、一回、一回、文字列型から日付型に変換しなくちゃーいけないからメンドイということをおっしゃっていて、確かにそうだよなー、と思い、今回、文字列型のまま日付の追加ができないか、ファンクションを自作してみました。

<CFFUNCTION name="DateAddtoString">
<CFARGUMENT name="aStr" type="String" required="yes">
<CFARGUMENT name="aNum" type="numeric" required="no" default=1>
<CFARGUMENT name="aType" type="String" required="no" default="d">

<CFSCRIPT>
var cf_YYYY = Left(aStr,4);
var cf_MM = Mid(aStr,5,2);
var cf_DD = Right(aStr,2);
var cf_Ret_Date = "";
</CFSCRIPT>

<CFSET cf_Ret_Date = CreateDate(cf_YYYY,cf_MM,cf_DD)>
<CFSET cf_Ret_Date = DateAdd(aType,aNum,cf_Ret_Date)>
<CFRETURN cf_Ret_Date>
</CFFUNCTION>

と実装しました。

このファンクションは、第一引数に、8桁の日付をとり、 第二引数に、追加したい日付の数、そして最後の引数は、 追加する日付の単位です。また単位については、 DateAdd関数と同じ単位で実装しました。

なんといっても、DateAddと違って、日付は文字列で オッケーなので、
<CFSET hoge = DateAddtoString("20080228",2,"m")>
と書いて、<CFOUTPUT>で出力させた場合、
{ts '2008-04-28 00:00:00'}
と返し、また、デフォルトで、日付に1日追加するように実装しているので、
<CFSET hoge = DateAddtoString("20080228")>と
書くことにより、
{ts '2008-02-29 00:00:00'}
と返してくれます。

まだ、若干、引数の入力チェックに関して弱い部分があるので、もうちょい調整をしたら、googlecodeのcoldfusion-add projectにアップロードしようかと考えています。

0 コメント:

コメントを投稿