Skip to main content
Module

x/date_fns/add/index.ts

date-fns Deno package
Very Popular
Latest
File
import addDays from '../addDays/index.ts'import addMonths from '../addMonths/index.ts'import toDate from '../toDate/index.ts'import requiredArgs from '../_lib/requiredArgs/index.ts'import toInteger from '../_lib/toInteger/index.ts'import { Duration } from '../types.ts'
/** * @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. * * @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 added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. * * | 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 {Date} the new date with the seconds added * @throws {TypeError} 2 arguments required * * @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, * minutes: 9, * seconds: 30, * }) * //=> Thu Jun 15 2017 15:29:20 */export default function add( dirtyDate: Date | number, duration: Duration): Date { requiredArgs(2, arguments)
if (!duration || typeof duration !== 'object') return new Date(NaN)
const years = 'years' in duration ? toInteger(duration.years) : 0 const months = 'months' in duration ? toInteger(duration.months) : 0 const weeks = 'weeks' in duration ? toInteger(duration.weeks) : 0 const days = 'days' in duration ? toInteger(duration.days) : 0 const hours = 'hours' in duration ? toInteger(duration.hours) : 0 const minutes = 'minutes' in duration ? toInteger(duration.minutes) : 0 const seconds = 'seconds' in duration ? toInteger(duration.seconds) : 0
// Add years and months const date = toDate(dirtyDate) 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 = new Date(dateWithDays.getTime() + msToAdd)
return finalDate}