ColdFusion で日付処理
元ネタ:誰もが一度は陥る日付処理。各種プログラミング言語におけるDateTime型/TimeStamp型の変換方法のまとめ - Yuta.Kikuchiの日記
ColdFusion がないので書いてみた。
って、「普通ねえよ」とか、「ColdFusionって何やねん!」とか、「うわーまだ生きてたのかー。」とか反応が普通だろうけどそこはスルー。
「ありがとー」、「たすかった」、「これを探してた」とかいう人は多分居ないけどそれも気にしない。
もう3年ぐらいちゃんと書いてなくて記憶を呼び起こしながら書いた。一応、動作チェック済み。
たまに、こういうことをすると頭の体操になる。
<cfset localDate = now()> <cfset utcDate = DateConvert("Local2utc", localDate)> <cfset epoch = DateDiff("s", "January 1 1970 00:00", utcDate)> <cfset utime = 1371729285> <cfoutput> Local Date: #localDate# <br> UTC Date: #utcDate# <br> Epoch: #epoch# <br> Time :#DateAdd("s", utime ,DateConvert("utc2Local", "January 1 1970 00:00"))# <br> yymmdd24hmiss: #DateFormat(localDate, "yyyy/MM/dd")# #TimeFormat(localDate, "HH:mm:ss")# </cfoutput>
簡単に解説するけど、段々やることが面倒臭くなります。
DateTime
now()
普通にnow関数を呼ぶだけ。
DateTime -> Unixtime
DateDiff("s", "January 1 1970 00:00", DateConvert("Local2utc",now()))
epoch秒はDateTimeには無い情報なので、ローカル時間をUTCに変更したうえ、epoch0秒である1970/01/01 00:00:00 と秒単位で差分をだしてepoch秒を算出する。面倒臭い。
Unixtime -> DateTime
DateAdd("s", 0 ,DateConvert("utc2Local", "January 1 1970 00:00"))
上記の DateAddの第二引数0にあたるところに変換したいepoch秒を指定します。
DateTimeからUnixtimeを計算したのと同じ要領でその逆をしてあげます。
yyyy/mm/dd 24h:mi:ss の表示
DateFormat(now(), "yyyy/MM/dd") TimeFormat(now(), "HH:mm:ss")
now() をそれぞれDateFormatとTimeFormatを使って日付と時刻を表示します。
日付時刻両方を上手く出すDateTineFormatというのもありますが、CFMXのバージョン10より前にはそんな関数在りませんので、別々にやってつなぐ必要があります。くそ面倒臭いですね。
CFMX9以下の場合、ColdFusion DateTimeFormat() Utility Function で紹介されてるようなfunctionを実装すればできなくも無いです。