function sub(dirtyDate, duration) {
  __WEBPACK_IMPORTED_MODULE_3__lib_requiredArgs_index_js__["a" /* default */](2, arguments);
  if (!duration || typeof duration !== 'object') return new Date(NaN);
  var years = 'years' in duration ? __WEBPACK_IMPORTED_MODULE_4__lib_toInteger_index_js__["a" /* default */](duration.years) : 0;
  var months = 'months' in duration ? __WEBPACK_IMPORTED_MODULE_4__lib_toInteger_index_js__["a" /* default */](duration.months) : 0;
  var weeks = 'weeks' in duration ? __WEBPACK_IMPORTED_MODULE_4__lib_toInteger_index_js__["a" /* default */](duration.weeks) : 0;
  var days = 'days' in duration ? __WEBPACK_IMPORTED_MODULE_4__lib_toInteger_index_js__["a" /* default */](duration.days) : 0;
  var hours = 'hours' in duration ? __WEBPACK_IMPORTED_MODULE_4__lib_toInteger_index_js__["a" /* default */](duration.hours) : 0;
  var minutes = 'minutes' in duration ? __WEBPACK_IMPORTED_MODULE_4__lib_toInteger_index_js__["a" /* default */](duration.minutes) : 0;
  var seconds = 'seconds' in duration ? __WEBPACK_IMPORTED_MODULE_4__lib_toInteger_index_js__["a" /* default */](duration.seconds) : 0; // Subtract years and months

  var dateWithoutMonths = __WEBPACK_IMPORTED_MODULE_1__subMonths_index_js__["a" /* default */](__WEBPACK_IMPORTED_MODULE_2__toDate_index_js__["a" /* default */](dirtyDate), months + years * 12); // Subtract weeks and days

  var dateWithoutDays = __WEBPACK_IMPORTED_MODULE_0__subDays_index_js__["a" /* default */](dateWithoutMonths, days + weeks * 7); // Subtract hours, minutes and seconds

  var minutestoSub = minutes + hours * 60;
  var secondstoSub = seconds + minutestoSub * 60;
  var mstoSub = secondstoSub * 1000;
  var finalDate = new Date(dateWithoutDays.getTime() - mstoSub);
  return finalDate;
}
@name sub
@category Common Helpers
@summary Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.

@description
Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.

@param {Date|Number} date - the date to be changed
@param {Duration} duration - the object with years, months, weeks, days, hours, minutes and seconds to be subtracted

| Key     | Description                        |
|---------|------------------------------------|
| years   | Amount of years to be subtracted   |
| months  | Amount of months to be subtracted  |
| weeks   | Amount of weeks to be subtracted   |
| days    | Amount of days to be subtracted    |
| hours   | Amount of hours to be subtracted   |
| minutes | Amount of minutes to be subtracted |
| seconds | Amount of seconds to be subtracted |

All values default to 0

@returns {Date} the new date with the seconds subtracted
@throws {TypeError} 2 arguments required

@example
// Subtract the following duration from 15 June 2017 15:29:20
const result = sub(new Date(2017, 5, 15, 15, 29, 20), {
  years: 2,
  months: 9,
  weeks: 1,
  days: 7,
  hours: 5,
  minutes: 9,
  seconds: 30
})
//=> Mon Sep 1 2014 10:19:50