text: 
  /**
   * Module requirements.
   */
  
  var SchemaType = require('../schematype')
    , CastError = SchemaType.CastError;
  
  /**
   * Date SchemaType constructor.
   *
   * @param {String} key
   * @param {Object} options
   * @api private
   */
  
  function SchemaDate (key, options) {
    SchemaType.call(this, key, options);
  };
  
  /**
   * Inherits from SchemaType.
   */
  
  SchemaDate.prototype.__proto__ = SchemaType.prototype;
  
  /**
   * Required validator for date
   *
   * @api private
   */
  
  SchemaDate.prototype.checkRequired = function (value) {
    return value instanceof Date;
  };
  
  /**
   * Casts to date
   *
   * @param {Object} value to cast
   * @api private
   */
  
  SchemaDate.prototype.cast = function (value) {
    if (value === null || value === '')
      return null;
  
    if (value instanceof Date)
      return value;
  
    var date;
  
    // support for timestamps
    if (value instanceof Number || 'number' == typeof value 
        || String(value) == Number(value))
      date = new Date(Number(value));
  
    // support for date strings
    else if (value.toString)
      date = new Date(value.toString());
  
    if (date.toString() != 'Invalid Date')
      return date;
  
    throw new CastError('date', value);
  };
  
  /**
   * Date Query casting.
   *
   * @api private
   */
  
  function handleSingle (val) {
    return this.cast(val);
  }
  
  function handleArray (val) {
    var self = this;
    return val.map( function (m) {
      return self.cast(m);
    });
  }
  
  SchemaDate.prototype.$conditionalHandlers = {
      '$lt': handleSingle
    , '$lte': handleSingle
    , '$gt': handleSingle
    , '$gte': handleSingle
    , '$ne': handleSingle
    , '$in': handleArray
    , '$nin': handleArray
    , '$all': handleArray
  };
  
  SchemaDate.prototype.castForQuery = function ($conditional, val) {
    var handler;
  
    if (2 !== arguments.length) {
      return this.cast($conditional);
    }
  
    handler = this.$conditionalHandlers[$conditional];
  
    if (!handler) {
      throw new Error("Can't use " + $conditional + " with Date.");
    }
  
    return handler.call(this, val);
  };
  
  /**
   * Module exports.
   */
  
  module.exports = SchemaDate;
  