"use strict"; exports.formatRelative = formatRelative; var _index = require("./differenceInCalendarDays.js"); var _index2 = require("./format.js"); var _index3 = require("./toDate.js"); var _index4 = require("./_lib/defaultLocale.js"); var _index5 = require("./_lib/defaultOptions.js"); /** * The {@link formatRelative} function options. */ /** * @name formatRelative * @category Common Helpers * @summary Represent the date in words relative to the given base date. * * @description * Represent the date in words relative to the given base date. * * | Distance to the base date | Result | * |---------------------------|---------------------------| * | Previous 6 days | last Sunday at 04:30 AM | * | Last day | yesterday at 04:30 AM | * | Same day | today at 04:30 AM | * | Next day | tomorrow at 04:30 AM | * | Next 6 days | Sunday at 04:30 AM | * | Other | 12/31/2017 | * * @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 format * @param baseDate - The date to compare with * @param options - An object with options * * @returns The date in words * * @throws `date` must not be Invalid Date * @throws `baseDate` must not be Invalid Date * @throws `options.locale` must contain `localize` property * @throws `options.locale` must contain `formatLong` property * @throws `options.locale` must contain `formatRelative` property * * @example * // Represent the date of 6 days ago in words relative to the given base date. In this example, today is Wednesday * const result = formatRelative(subDays(new Date(), 6), new Date()) * //=> "last Thursday at 12:45 AM" */ function formatRelative(date, baseDate, options) { const _date = (0, _index3.toDate)(date); const _baseDate = (0, _index3.toDate)(baseDate); const defaultOptions = (0, _index5.getDefaultOptions)(); const locale = options?.locale ?? defaultOptions.locale ?? _index4.defaultLocale; const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions.weekStartsOn ?? defaultOptions.locale?.options?.weekStartsOn ?? 0; const diff = (0, _index.differenceInCalendarDays)(_date, _baseDate); if (isNaN(diff)) { throw new RangeError("Invalid time value"); } let token; if (diff < -6) { token = "other"; } else if (diff < -1) { token = "lastWeek"; } else if (diff < 0) { token = "yesterday"; } else if (diff < 1) { token = "today"; } else if (diff < 2) { token = "tomorrow"; } else if (diff < 7) { token = "nextWeek"; } else { token = "other"; } const formatStr = locale.formatRelative(token, _date, _baseDate, { locale, weekStartsOn, }); return (0, _index2.format)(_date, formatStr, { locale, weekStartsOn }); }