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

Reply via email to