{"version":3,"sources":["../src/DateUtils.js"],"names":["clone","isDate","addMonths","isSameDay","isSameMonth","isDayBefore","isDayAfter","isPastDay","isFutureDay","isDayBetween","addDayToRange","isDayInRange","getWeekNumber","d","Date","getTime","value","isNaN","valueOf","n","newDate","setMonth","getMonth","d1","d2","getDate","getFullYear","day1","setHours","day2","today","tomorrow","date","day","range","from","to","setDate","getDay","Math","ceil"],"mappings":"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","file":"DateUtils.js","sourcesContent":["/**\n * Clone a date object.\n *\n * @export\n * @param {Date} d The date to clone\n * @return {Date} The cloned date\n */\nexport function clone(d) {\n return new Date(d.getTime());\n}\n\n/**\n * Return `true` if the passed value is a valid JavaScript Date object.\n *\n * @export\n * @param {any} value\n * @returns {Boolean}\n */\nexport function isDate(value) {\n return value instanceof Date && !isNaN(value.valueOf());\n}\n\n/**\n * Return `d` as a new date with `n` months added.\n *\n * @export\n * @param {Date} d\n * @param {number} n\n */\nexport function addMonths(d, n) {\n const newDate = clone(d);\n newDate.setMonth(d.getMonth() + n);\n return newDate;\n}\n\n/**\n * Return `true` if two dates are the same day, ignoring the time.\n *\n * @export\n * @param {Date} d1\n * @param {Date} d2\n * @return {Boolean}\n */\nexport function isSameDay(d1, d2) {\n if (!d1 || !d2) {\n return false;\n }\n return (\n d1.getDate() === d2.getDate() &&\n d1.getMonth() === d2.getMonth() &&\n d1.getFullYear() === d2.getFullYear()\n );\n}\n\n/**\n * Return `true` if two dates fall in the same month.\n *\n * @export\n * @param {Date} d1\n * @param {Date} d2\n * @return {Boolean}\n */\nexport function isSameMonth(d1, d2) {\n if (!d1 || !d2) {\n return false;\n }\n return (\n d1.getMonth() === d2.getMonth() && d1.getFullYear() === d2.getFullYear()\n );\n}\n\n/**\n * Returns `true` if the first day is before the second day.\n *\n * @export\n * @param {Date} d1\n * @param {Date} d2\n * @returns {Boolean}\n */\nexport function isDayBefore(d1, d2) {\n const day1 = clone(d1).setHours(0, 0, 0, 0);\n const day2 = clone(d2).setHours(0, 0, 0, 0);\n return day1 < day2;\n}\n\n/**\n * Returns `true` if the first day is after the second day.\n *\n * @export\n * @param {Date} d1\n * @param {Date} d2\n * @returns {Boolean}\n */\nexport function isDayAfter(d1, d2) {\n const day1 = clone(d1).setHours(0, 0, 0, 0);\n const day2 = clone(d2).setHours(0, 0, 0, 0);\n return day1 > day2;\n}\n\n/**\n * Return `true` if a day is in the past, e.g. yesterday or any day\n * before yesterday.\n *\n * @export\n * @param {Date} d\n * @return {Boolean}\n */\nexport function isPastDay(d) {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n return isDayBefore(d, today);\n}\n\n/**\n * Return `true` if a day is in the future, e.g. tomorrow or any day\n * after tomorrow.\n *\n * @export\n * @param {Date} d\n * @return {Boolean}\n */\nexport function isFutureDay(d) {\n const tomorrow = new Date(new Date().getTime() + 24 * 60 * 60 * 1000);\n tomorrow.setHours(0, 0, 0, 0);\n return d >= tomorrow;\n}\n\n/**\n * Return `true` if day `d` is between days `d1` and `d2`,\n * without including them.\n *\n * @export\n * @param {Date} d\n * @param {Date} d1\n * @param {Date} d2\n * @return {Boolean}\n */\nexport function isDayBetween(d, d1, d2) {\n const date = clone(d);\n date.setHours(0, 0, 0, 0);\n return (\n (isDayAfter(date, d1) && isDayBefore(date, d2)) ||\n (isDayAfter(date, d2) && isDayBefore(date, d1))\n );\n}\n\n/**\n * Add a day to a range and return a new range. A range is an object with\n * `from` and `to` days.\n *\n * @export\n * @param {Date} day\n * @param {Object} range\n * @return {Object} Returns a new range object\n */\nexport function addDayToRange(day, range = { from: null, to: null }) {\n let { from, to } = range;\n if (!from) {\n from = day;\n } else if (from && to && isSameDay(from, to) && isSameDay(day, from)) {\n from = null;\n to = null;\n } else if (to && isDayBefore(day, from)) {\n from = day;\n } else if (to && isSameDay(day, to)) {\n from = day;\n to = day;\n } else {\n to = day;\n if (isDayBefore(to, from)) {\n to = from;\n from = day;\n }\n }\n\n return { from, to };\n}\n\n/**\n * Return `true` if a day is included in a range of days.\n *\n * @export\n * @param {Date} day\n * @param {Object} range\n * @return {Boolean}\n */\nexport function isDayInRange(day, range) {\n const { from, to } = range;\n return (\n (from && isSameDay(day, from)) ||\n (to && isSameDay(day, to)) ||\n (from && to && isDayBetween(day, from, to))\n );\n}\n\n/**\n * Return the year's week number (as per ISO, i.e. with the week starting from monday)\n * for the given day.\n *\n * @export\n * @param {Date} day\n * @returns {Number}\n */\nexport function getWeekNumber(day) {\n const date = clone(day);\n date.setHours(0, 0, 0);\n date.setDate(date.getDate() + 4 - (date.getDay() || 7));\n return Math.ceil(\n ((date - new Date(date.getFullYear(), 0, 1)) / 8.64e7 + 1) / 7\n );\n}\n\nexport default {\n addDayToRange,\n addMonths,\n clone,\n getWeekNumber,\n isDate,\n isDayAfter,\n isDayBefore,\n isDayBetween,\n isDayInRange,\n isFutureDay,\n isPastDay,\n isSameDay,\n isSameMonth,\n};\n"]}