code: function Date (year, month, day, hour, minute, second, millisecond, timezone) {
    if (!(this instanceof Date)) {
      return new Date(year, month, day, hour, minute, second, millisecond, timezone).toString();
    }
    var argc = arguments.length
      , d;
    // So that we don't have to do the switch block below twice!
    while (argc > 0 && typeof arguments[argc-1] === 'undefined') {
      argc--;
    }
    // An optional 'timezone' argument may be passed as the final argument
    if (argc >= 2 && typeof arguments[argc - 1] === 'string') {
      timezone = arguments[argc - 1];
      argc--;
    }
    // Ugly, but the native Date constructor depends on arguments.length in order
    // to create a Date instance in the intended fashion.
    switch (argc) {
      case 0:
        d = new _Date(); break;
      case 1:
        d = new _Date(year); break;
      case 2:
        d = new _Date(year, month); break;
      case 3:
        d = new _Date(year, month, day); break;
      case 4:
        d = new _Date(year, month, day, hour); break;
      case 5:
        d = new _Date(year, month, day, hour, minute); break;
      case 6:
        d = new _Date(year, month, day, hour, minute, second); break;
      case 7:
        d = new _Date(year, month, day, hour, minute, second, millisecond); break;
    }
    if (timezone) {
      // set time given timezone relative to the currently set local time
      // (changing the internal "time" milliseconds value unless ms specified)
      d.setTimezone(timezone, !(argc == 1 && typeof year === 'number'));
    } else {
      d.setTimezone(exports.currentTimezone);
    }
    return d;
  }
docs: Export the modified 'Date' instance. Users should either use this with the 'new' operator, or extend an already existing Date instance with 'extend()'. An optional, NON-STANDARD, "timezone" argument may be appended as the final argument, in order to specify the initial timezone the Date instance should be created with.