Unfortunately, I can't REALLY extend the Date class because it's declared
final (thanks a lot, guys). But here's my replacement for it. It wraps all
the same functions as Date exposes by sending them to an internal Date
object. It also adds a built-in formatter and a format() call. In
addition, there's an asString property which helps a lot in the Expressions
tab during debugging. Oh, and I've extended the formatter to interpret
"SSS" as zero-padded milliseconds (something strangely lacking in
DateFormatter). Just thought some people might make use of this simple
class. It's not something you'd use in a performance critical situation,
but then again, neither is the original Date class.
package nes
{
import mx.formatters.DateFormatter;
public class DateEx
{
private var formatter:DateFormatter;
public var internalDate:Date;
public function DateEx(yearOrTimeValue:Object = null, month:Number =
0, date:Number = 1, hour:Number = 0, minute:Number = 0, second:Number = 0,
millisecond:Number = 0):void
{
if (yearOrTimeValue == null)
internalDate = new Date
else if (yearOrTimeValue is Date || yearOrTimeValue is String ||
yearOrTimeValue is Number && arguments.length == 1)
internalDate = new Date(yearOrTimeValue)
else if (yearOrTimeValue is DateEx)
internalDate = new Date(DateEx(yearOrTimeValue).internalDate)
else if (yearOrTimeValue is Number)
internalDate = new Date(yearOrTimeValue, month, date, hour,
minute, second, millisecond);
}
public function format(formatString:String = "YYYY-MM-DD
JJ:NN:SS.SSS"):String
{
if (!formatter)
formatter = new DateFormatter;
formatString = formatString.replace("SSS",
function replFN():String {
if (internalDate.milliseconds > 99)
return internalDate.milliseconds.toString()
else if (internalDate.milliseconds > 9)
return "0" + internalDate.milliseconds.toString()
else
return "00" + internalDate.milliseconds.toString()
});
formatter.formatString = formatString;
return formatter.format(internalDate);
};
public function get asString():String
{
return format();
}
public static const length:int = 7;
public function get fullYear():Number { return
internalDate.getFullYear(); }
public function set fullYear(value:Number):void {
internalDate.setFullYear(value); }
public function get month():Number { return internalDate.getMonth(); }
public function set month(value:Number):void { internalDate.month =
value; }
public function get date():Number { return internalDate.getDate(); }
public function set date(value:Number):void {
internalDate.setDate(value);
}
public function get hours():Number { return internalDate.getHours(); }
public function set hours(value:Number):void {
internalDate.setHours(value);
}
public function get minutes():Number { return internalDate.getMinutes();
}
public function set minutes(value:Number):void {
internalDate.setMinutes(value); }
public function get seconds():Number { return internalDate.getSeconds();
}
public function set seconds(value:Number):void {
internalDate.setSeconds(value); }
public function get milliseconds():Number { return
internalDate.getMilliseconds(); }
public function set milliseconds(value:Number):void {
internalDate.setMilliseconds(value); }
public function get fullYearUTC():Number { return
internalDate.getUTCFullYear(); }
public function set fullYearUTC(value:Number):void {
internalDate.setUTCFullYear(value); }
public function get monthUTC():Number { return
internalDate.getUTCMonth(); }
public function set monthUTC(value:Number):void {
internalDate.setUTCMonth(value); }
public function get dateUTC():Number { return internalDate.getUTCDate();
}
public function set dateUTC(value:Number):void {
internalDate.setUTCDate(value); }
public function get hoursUTC():Number { return
internalDate.getUTCHours(); }
public function set hoursUTC(value:Number):void {
internalDate.setUTCHours(value); }
public function get minutesUTC():Number { return
internalDate.getUTCMinutes(); }
public function set minutesUTC(value:Number):void {
internalDate.setUTCMinutes(value); }
public function get secondsUTC():Number { return
internalDate.getUTCSeconds(); }
public function set secondsUTC(value:Number):void {
internalDate.setUTCSeconds(value); }
public function get millisecondsUTC():Number { return
internalDate.getUTCMilliseconds(); }
public function set millisecondsUTC(value:Number):void {
internalDate.setUTCMilliseconds(value); }
public function get time():Number { return internalDate.getTime(); }
public function set time(value:Number):void {
internalDate.setTime(value);
}
public function get timezoneOffset():Number { return
internalDate.getTimezoneOffset(); }
public function get day():Number { return internalDate.getDay(); }
public function get dayUTC():Number { return internalDate.getUTCDay();
}
public static function UTC(year:Number,month:Number,date:Number = 1,
hour:Number = 0,minute:Number = 0,second:Number =
0,millisecond:Number = 0):Number {
return Date.UTC(year, month, date, hour, minute, second,
millisecond) };
public function getDate():Number { return internalDate.getDate() };
public function getDay():Number { return internalDate.getDay() };
public function getFullYear():Number { return internalDate.getFullYear()
};
public function getHours():Number { return internalDate.getHours() };
public function getMilliseconds():Number { return
internalDate.getMilliseconds() };
public function getMinutes():Number { return internalDate.getMinutes()
};
public function getMonth():Number { return internalDate.getMonth() };
public function getSeconds():Number { return internalDate.getSeconds()
};
public function getTime():Number { return internalDate.getTime() };
public function getTimezoneOffset():Number { return
internalDate.getTimezoneOffset() };
public function getUTCDate():Number { return internalDate.getUTCDate()
};
public function getUTCDay():Number { return internalDate.getUTCDay()
};
public function getUTCFullYear():Number { return
internalDate.getUTCFullYear() };
public function getUTCHours():Number { return internalDate.getUTCHours()
};
public function getUTCMilliseconds():Number { return
internalDate.getUTCMilliseconds() };
public function getUTCMinutes():Number { return
internalDate.getUTCMinutes() };
public function getUTCMonth():Number { return internalDate.getUTCMonth()
};
public function getUTCSeconds():Number { return
internalDate.getUTCSeconds() };
public static function parse(date:String):Number { return
Date.parse(date)
};
public function setDate(day:Number):Number { return
internalDate.setDate() };
public function setFullYear(year:Number, month:Number,
day:Number):Number { return internalDate.setFullYear(year, month, day) };
public function setHours(hour:Number, minute:Number, second:Number,
millisecond:Number):Number { return internalDate.setHours(hour, minute,
second, millisecond) };
public function setMilliseconds(millisecond:Number):Number { return
internalDate.setMilliseconds(millisecond) };
public function setMinutes(minute:Number, second:Number,
millisecond:Number):Number { return internalDate.setMinutes(minute, second,
millisecond) };
public function setMonth(month:Number, day:Number):Number { return
internalDate.setMonth(month, day) };
public function setSeconds(second:Number, millisecond:Number):Number {
return internalDate.setSeconds(second, millisecond) };
public function setTime(millisecond:Number):Number { return
internalDate.setTime(millisecond) };
public function setUTCDate(day:Number):Number { return
internalDate.setUTCDate(day) };
public function setUTCFullYear(year:Number, month:Number,
day:Number):Number { return internalDate.setUTCFullYear(year, month, day) };
public function setUTCHours(hour:Number, minute:Number, second:Number,
millisecond:Number):Number { return internalDate.setUTCHours(hour, minute,
second, millisecond) };
public function setUTCMilliseconds(millisecond:Number):Number { return
internalDate.setUTCMilliseconds(millisecond) };
public function setUTCMinutes(minute:Number, second:Number,
millisecond:Number):Number { return internalDate.setUTCMinutes(minute,
second, millisecond) };
public function setUTCMonth(month:Number, day:Number):Number { return
internalDate.setUTCMonth(month, day) };
public function setUTCSeconds(second:Number,
millisecond:Number):Number { return internalDate.setUTCSeconds(second,
millisecond) };
public function toDateString():String { return
internalDate.toDateString() };
public function toTimeString():String { return
internalDate.toTimeString() };
public function toLocaleString():String { return
internalDate.toLocaleString() };
public function toLocaleDateString():String { return
internalDate.toLocaleDateString() };
public function toLocaleTimeString():String { return
internalDate.toLocaleTimeString() };
public function toUTCString():String { return internalDate.toUTCString()
};
public function toString():String { return internalDate.toString() };
public function valueOf():Number { return internalDate.valueOf() };
}
}
--
Jason