UNPKG

6.66 kBSource Map (JSON)View Raw
1{"version":3,"file":"date.js","sources":["../src/utils/date.js"],"sourcesContent":["import dayjs from 'dayjs'\n\nconst UNITS = [\n ['years', 'year'],\n ['months', 'month'],\n ['days', 'day'],\n ['hours', 'hour'],\n ['minutes', 'minute'],\n ['seconds', 'second'],\n]\n\nconst DEFAULT_UNITS = ['years', 'months', 'days', 'hours', 'minutes', 'seconds']\n\n// Return the difference between two dates, per unit.\n// Set `units` to get specific units only, e.g. ['minutes', 'seconds']\n// If `units` is not set, all the units are enabled.\nexport const difference = (date1, date2, options = {}) => {\n const units = options.units || DEFAULT_UNITS\n const maxUnits = options.maxUnits || -1\n const keepLeadingZeros =\n (maxUnits === -1 && options.keepLeadingZeros) || false\n\n const start = date2 > date1 ? date1 : date2\n\n const getRightMostUnitIndex = () =>\n [...UNITS].reverse().find(([unit]) => units.includes(unit))[0]\n\n return UNITS.reduce(\n (result, [name, unitName], index) => {\n result[name] = null\n\n // fill the current unit, subtract the difference from the remaining\n if (\n (maxUnits === -1 || result.remainingUnits > 0) &&\n units.includes(name)\n ) {\n result[name] = result.remaining.diff(start, unitName)\n result.remaining = result.remaining.subtract(result[name], unitName)\n }\n\n // remove leading zeros\n if (!keepLeadingZeros && !result.seenNonZero) {\n if (result[name] === 0) {\n result[name] = null\n } else {\n result.seenNonZero = true\n }\n }\n\n // enforce the maxUnits option\n if (result.remainingUnits > 0 && result.seenNonZero) {\n result.remainingUnits -= 1\n }\n\n // last iteration\n if (index === UNITS.length - 1) {\n delete result.remaining\n delete result.remainingUnits\n delete result.seenNonZero\n\n // include at least one 0\n if (Object.values(result).every(val => val === null)) {\n result[getRightMostUnitIndex()] = 0\n }\n }\n\n return result\n },\n {\n remaining: dayjs(start === date1 ? date2 : date1),\n remainingUnits: maxUnits,\n seenNonZero: false,\n }\n )\n}\n\nexport const eachDayOfInterval = ({ start, end } = {}) => {\n let startDate = dayjs(start)\n let endDate = dayjs(end)\n\n if (!startDate.isValid()) {\n throw new Error('Start date of interval is invalid')\n }\n if (!endDate.isValid()) {\n throw new Error('End date of interval is invalid')\n }\n\n startDate = startDate.startOf('day')\n endDate = endDate.startOf('day')\n\n if (startDate.isAfter(endDate)) {\n throw new Error('Start date of interval is after end date')\n }\n\n const interval = []\n while (!startDate.isAfter(endDate)) {\n interval.push(startDate.toDate())\n startDate = startDate.add(1, 'day')\n }\n\n return interval\n}\n\nexport const formatHtmlDatetime = date => dayjs(date).toISOString()\n"],"names":["UNITS","DEFAULT_UNITS","difference","date1","date2","options","units","maxUnits","keepLeadingZeros","start","getRightMostUnitIndex","reverse","find","unit","includes","reduce","result","index","name","unitName","remainingUnits","remaining","diff","subtract","seenNonZero","length","Object","values","every","val","dayjs","eachDayOfInterval","end","startDate","endDate","isValid","Error","startOf","isAfter","interval","push","toDate","add","formatHtmlDatetime","date","toISOString"],"mappings":"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"}
\No newline at end of file