import { addDays } from "./addDays.mjs"; import { addMonths } from "./addMonths.mjs"; import { constructFrom } from "./constructFrom.mjs"; import { toDate } from "./toDate.mjs"; /** * @name add * @category Common Helpers * @summary Add the specified years, months, weeks, days, hours, minutes and seconds to the given date. * * @description * Add the specified years, months, weeks, days, hours, minutes and seconds to the given date. * * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc). * * @param date - The date to be changed * @param duration - The object with years, months, weeks, days, hours, minutes and seconds to be added. * * | Key | Description | * |----------------|------------------------------------| * | years | Amount of years to be added | * | months | Amount of months to be added | * | weeks | Amount of weeks to be added | * | days | Amount of days to be added | * | hours | Amount of hours to be added | * | minutes | Amount of minutes to be added | * | seconds | Amount of seconds to be added | * * All values default to 0 * * @returns The new date with the seconds added * * @example * // Add the following duration to 1 September 2014, 10:19:50 * const result = add(new Date(2014, 8, 1, 10, 19, 50), { * years: 2, * months: 9, * weeks: 1, * days: 7, * hours: 5,\\-7 * minutes: 9, * seconds: 30, * }) * //=> Thu Jun 15 2017 15:29:20 */ export function add(date, duration) { const { years = 0, months = 0, weeks = 0, days = 0, hours = 0, minutes = 0, seconds = 0, } = duration; // Add years and months const _date = toDate(date); const dateWithMonths = months || years ? addMonths(_date, months + years * 12) : _date; // Add weeks and days const dateWithDays = days || weeks ? addDays(dateWithMonths, days + weeks * 7) : dateWithMonths; // Add days, hours, minutes and seconds const minutesToAdd = minutes + hours * 60; const secondsToAdd = seconds + minutesToAdd * 60; const msToAdd = secondsToAdd * 1000; const finalDate = constructFrom(date, dateWithDays.getTime() + msToAdd); return finalDate; } // Fallback for modularized imports: export default add;