I rarely enjoy programming ColdFusion, but have worked around it for quite some time. To make things a bit easier when communicating with ColdFusion-based dates and timestamps, I wrote two AS3 classes that I’d like to share:
CF Timestamp to AS3 Date
This function will take a ColdFusion formatted timestamp (i.e. {ts ‘2009-04-29 15:59:36.11′}) and return an AS3 Date Object.
package com.qnotemedia.utils
{
public class CFtimestamp
{
public static function toDate(rawCFtimestamp:String):Date {
var date:String = rawCFtimestamp.split("'")[1].split(" ")[0];
var time:String = rawCFtimestamp.split("'")[1].split(" ")[1].split("'")[0];
var year:uint = date.split("-")[0];
var month:uint = date.split("-")[1] - 1;
var day:uint = date.split("-")[2];
var hour:uint = time.split(":")[0];
var minute:uint = time.split(":")[1];
var second:uint = time.split(":")[2].split(".")[0];
var millisecond:uint = time.split(":")[2].split(".")[2];
return new Date(year,month,day,hour,minute,second,millisecond);
}
}
}
Using it is quite simple:
var myCFtimestamp = "{ts '2009-04-29 15:59:36.11'}";
var as3Date = CFtimestamp.toDate(myCFtimestamp);
AS3 Date formatted with ColdFusion’s DateFormat function
Another useful function. It takes an AS3 Date Object and returns a string, where the masking syntax is based on ColdFusion’s DateFormat() function.
Note that short, medium, long, and full are included.
package com.qnotemedia.utils {
public class DateFormatter {
private static var monthNames:Array = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
private static var dayNames:Array = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
private static var monthAbbrs:Array = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sept","Oct","Nov","Dec");
private static var dayAbbrs:Array = new Array("Sun","Mon","Tues","Wed","Thurs","Fri","Sat");
public static function monthByName(num:uint):String {
return monthNames[num];
}
public static function monthByAbbr(num:uint):String {
return monthAbbrs[num];
}
public static function dayByName(num:uint):String {
return dayNames[num];
}
public static function dayByAbbr(num:uint):String {
return dayAbbrs[num];
}
public static function includeZero(num:uint):String {
var numStr:String = num.toString();
if (num > -1 && num < 10) {
numStr = "0" + numStr;
}
return numStr;
}
public static function toCFdateString(dt:Date,msk:String):String {
// d: Day of the month as digits; no leading zero for single-digit days.
// dd: Day of the month as digits; leading zero for single-digit days.
// ddd: Day of the week as a three-letter abbreviation.
// dddd: Day of the week as its full name.
// m: Month as digits; no leading zero for single-digit months.
// mm: Month as digits; leading zero for single-digit months.
// mmm: Month as a three-letter abbreviation.
// mmmm: Month as its full name.
// yy: Year as last two digits; leading zero for years less than 10.
// yyyy: Year represented by four digits.
// The following masks tell how to format the full date and cannot be combined with other masks:
// short: equivalent to m/d/y
// medium: equivalent to mmm d, yyyy
// long: equivalent to mmmm d, yyyy
// full: equivalent to dddd, mmmm d, yyyy
switch (msk) {
case "short":
msk = "m/d/yy";
break;
case "medium":
msk = "mmm d, yyyy";
break;
case "long":
msk = "mmmm d, yyyy";
break;
case "full":
msk = "dddd, mmmm d, yyyy";
break;
}
var returnedString:String = "";
var currChar:String = "";
var currIndex:uint = 0;
var arMSK:Array = new Array();
for (var i:uint=0; i < msk.length; i++) {
var char:String = msk.charAt(i);
if (char == currChar) {
arMSK[currIndex] = arMSK[currIndex] + char;
} else {
currIndex += 1;
currChar = char;
arMSK[currIndex] = currChar;
}
}
for (var j:uint=0; j < arMSK.length; j++) {
var mskItem:* = (arMSK[j] == undefined) ? "" : arMSK[j];
switch (mskItem) {
case "dddd":
mskItem = dayByName(dt.getDay());
break;
case "mmmm":
mskItem = monthByName(dt.getMonth());
break;
case "yyyy":
mskItem = dt.getFullYear();
break;
case "ddd":
mskItem = dayByAbbr(dt.getDay());
break;
case "mmm":
mskItem = monthByAbbr(dt.getMonth());
break;
case "dd":
mskItem = includeZero(dt.getDate());
break;
case "mm":
mskItem = includeZero(dt.getMonth()+1);
break;
case "yy":
mskItem = dt.getFullYear().toString().slice(2,4);
break;
case "d":
mskItem = dt.getDate();
break;
case "m":
mskItem = dt.getMonth()+1;
break;
case "y":
mskItem = dt.getFullYear().toString().slice(2,4); // same as "yy"
break;
}
arMSK[j] = mskItem;
}
return arMSK.join("");
}
}
}
Again - easy to use:
var myAS3date:Date = new Date(2009,3,29,15,59,36,11); var myAs3dateFormatted:String = DateFormatter.toCFdateString(myAS3date,"mm dd, yyyy")
Or combine them both!:
var myCFtimestamp = "{ts '2009-04-29 15:59:36.11'}";
var myAs3dateFormatted:String = DateFormatter.toCFdateString(CFtimestamp.toDate(myCFtimestamp),"mm dd, yyyy")
Have a question or comment?