Adds or subtracts specified increments to or from a date object
@param   {String}  increment   an increment to add
@param   {Number}  date1       date object
@param   {Date}    date2       date object
@returns {Number}              numeric difference between the dates in the specific increment
function diffIt(increment, date1, date2) {
  var _incrementHandlers;

  var incrementHandlers = (_incrementHandlers = {}, defineProperty(_incrementHandlers, MILLISECOND, function (date1, date2) {
    return diff(date1, date2);
  }), defineProperty(_incrementHandlers, SECOND, function (date1, date2) {
    return diff(date1, date2) / 1000;
  }), defineProperty(_incrementHandlers, MINUTE, function (date1, date2) {
    return this[SECOND](date1, date2) / 60;
  }), defineProperty(_incrementHandlers, HOUR, function (date1, date2) {
    return this[MINUTE](date1, date2) / 60;
  }), defineProperty(_incrementHandlers, DATE, function (date1, date2) {
    return this[HOUR](date1, date2) / 24;
  }), defineProperty(_incrementHandlers, WEEK, function (date1, date2) {
    return this[DATE](date1, date2) / 7;
  }), defineProperty(_incrementHandlers, MONTH, function (date1, date2) {
    return this[DATE](date1, date2) / 30.44; // 365.25 / 12
  }), defineProperty(_incrementHandlers, YEAR, function (date1, date2) {
    return this[DATE](date1, date2) / 365.25; // Leap-year friendly
  }), _incrementHandlers);

  return incrementHandlers[increment](date1, date2);
}