以前、先輩社員と一緒に帰るときに、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 コメント:
コメントを投稿