UNPKG

@chnlib/chinese-holiday

Version:
114 lines (108 loc) 7.74 kB
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } import dayjs from "dayjs"; import isBetween from "dayjs/plugin/isBetween"; import isSameOrAfter from "dayjs/plugin/isSameOrAfter"; import { HOLIDAY_2000 } from "./constants/HOLIDAY_2000"; import { ADDTIONALWORKDAY_2001, HOLIDAY_2001 } from "./constants/HOLIDAY_2001"; import { ADDTIONALWORKDAY_2002, HOLIDAY_2002 } from "./constants/HOLIDAY_2002"; import { ADDTIONALWORKDAY_2003, HOLIDAY_2003 } from "./constants/HOLIDAY_2003"; import { ADDTIONALWORKDAY_2004, HOLIDAY_2004 } from "./constants/HOLIDAY_2004"; import { ADDTIONALWORKDAY_2005, HOLIDAY_2005 } from "./constants/HOLIDAY_2005"; import { ADDTIONALWORKDAY_2006, HOLIDAY_2006 } from "./constants/HOLIDAY_2006"; import { ADDTIONALWORKDAY_2007, HOLIDAY_2007 } from "./constants/HOLIDAY_2007"; import { ADDTIONALWORKDAY_2008, HOLIDAY_2008 } from "./constants/HOLIDAY_2008"; import { ADDTIONALWORKDAY_2009, HOLIDAY_2009 } from "./constants/HOLIDAY_2009"; import { ADDTIONALWORKDAY_2010, HOLIDAY_2010 } from "./constants/HOLIDAY_2010"; import { ADDTIONALWORKDAY_2011, HOLIDAY_2011 } from "./constants/HOLIDAY_2011"; import { ADDTIONALWORKDAY_2012, HOLIDAY_2012 } from "./constants/HOLIDAY_2012"; import { ADDTIONALWORKDAY_2013, HOLIDAY_2013 } from "./constants/HOLIDAY_2013"; import { ADDTIONALWORKDAY_2014, HOLIDAY_2014 } from "./constants/HOLIDAY_2014"; import { ADDTIONALWORKDAY_2015, HOLIDAY_2015 } from "./constants/HOLIDAY_2015"; import { ADDTIONALWORKDAY_2016, HOLIDAY_2016 } from "./constants/HOLIDAY_2016"; import { ADDTIONALWORKDAY_2017, HOLIDAY_2017 } from "./constants/HOLIDAY_2017"; import { ADDTIONALWORKDAY_2018, HOLIDAY_2018 } from "./constants/HOLIDAY_2018"; import { ADDTIONALWORKDAY_2019, HOLIDAY_2019 } from "./constants/HOLIDAY_2019"; import { ADDTIONALWORKDAY_2020, HOLIDAY_2020 } from "./constants/HOLIDAY_2020"; import { ADDTIONALWORKDAY_2021, HOLIDAY_2021 } from "./constants/HOLIDAY_2021"; import { ADDTIONALWORKDAY_2022, HOLIDAY_2022 } from "./constants/HOLIDAY_2022"; import { ADDTIONALWORKDAY_2023, HOLIDAY_2023 } from "./constants/HOLIDAY_2023"; import { ADDTIONALWORKDAY_2024, HOLIDAY_2024 } from "./constants/HOLIDAY_2024"; import { ADDTIONALWORKDAY_2025, HOLIDAY_2025 } from "./constants/HOLIDAY_2025"; dayjs.extend(isBetween); dayjs.extend(isSameOrAfter); var ALL_HOLIDAYS = [].concat(_toConsumableArray(HOLIDAY_2025), _toConsumableArray(HOLIDAY_2024), _toConsumableArray(HOLIDAY_2023), _toConsumableArray(HOLIDAY_2022), _toConsumableArray(HOLIDAY_2021), _toConsumableArray(HOLIDAY_2020), _toConsumableArray(HOLIDAY_2020), _toConsumableArray(HOLIDAY_2019), _toConsumableArray(HOLIDAY_2018), _toConsumableArray(HOLIDAY_2017), _toConsumableArray(HOLIDAY_2016), _toConsumableArray(HOLIDAY_2015), _toConsumableArray(HOLIDAY_2014), _toConsumableArray(HOLIDAY_2013), _toConsumableArray(HOLIDAY_2012), _toConsumableArray(HOLIDAY_2011), _toConsumableArray(HOLIDAY_2010), _toConsumableArray(HOLIDAY_2009), _toConsumableArray(HOLIDAY_2008), _toConsumableArray(HOLIDAY_2007), _toConsumableArray(HOLIDAY_2006), _toConsumableArray(HOLIDAY_2005), _toConsumableArray(HOLIDAY_2004), _toConsumableArray(HOLIDAY_2003), _toConsumableArray(HOLIDAY_2002), _toConsumableArray(HOLIDAY_2001), _toConsumableArray(HOLIDAY_2000)); var ALL_ADDTIONALWORKDAYS = [].concat(_toConsumableArray(ADDTIONALWORKDAY_2025), _toConsumableArray(ADDTIONALWORKDAY_2024), _toConsumableArray(ADDTIONALWORKDAY_2023), _toConsumableArray(ADDTIONALWORKDAY_2022), _toConsumableArray(ADDTIONALWORKDAY_2021), _toConsumableArray(ADDTIONALWORKDAY_2020), _toConsumableArray(ADDTIONALWORKDAY_2019), _toConsumableArray(ADDTIONALWORKDAY_2018), _toConsumableArray(ADDTIONALWORKDAY_2017), _toConsumableArray(ADDTIONALWORKDAY_2016), _toConsumableArray(ADDTIONALWORKDAY_2015), _toConsumableArray(ADDTIONALWORKDAY_2014), _toConsumableArray(ADDTIONALWORKDAY_2013), _toConsumableArray(ADDTIONALWORKDAY_2012), _toConsumableArray(ADDTIONALWORKDAY_2011), _toConsumableArray(ADDTIONALWORKDAY_2010), _toConsumableArray(ADDTIONALWORKDAY_2009), _toConsumableArray(ADDTIONALWORKDAY_2008), _toConsumableArray(ADDTIONALWORKDAY_2007), _toConsumableArray(ADDTIONALWORKDAY_2006), _toConsumableArray(ADDTIONALWORKDAY_2005), _toConsumableArray(ADDTIONALWORKDAY_2004), _toConsumableArray(ADDTIONALWORKDAY_2003), _toConsumableArray(ADDTIONALWORKDAY_2002), _toConsumableArray(ADDTIONALWORKDAY_2001)); /** * 判断是否为节假日 * @param value 日期 * @returns */ function isHoliday(value) { var matchedHoliday = []; var fmtDate = dayjs(value).format("YYYY-MM-DD"); for (var i = 0; i < ALL_HOLIDAYS.length; i++) { if (ALL_HOLIDAYS[i].date === fmtDate) { matchedHoliday.push(ALL_HOLIDAYS[i]); break; } } // console.log(matchedHoliday); return matchedHoliday.length === 1 ? true : false; } /** * 判断是否为工作日 * @param value 日期 * @returns */ function isWorkday(value) { var matchedWorkday = []; var fmtDate = dayjs(value).format("YYYY-MM-DD"); // var fmtDateDay = dayjs(value).day(); // 获取传入的日期是周几 // 如果日期是周六周日,判断是否在调休日中,如果是周一至周五,判断是否节假日 if (fmtDateDay === 6 || fmtDateDay === 0) { for (var i = 0; i < ALL_ADDTIONALWORKDAYS.length; i++) { if (ALL_ADDTIONALWORKDAYS[i].date === fmtDate) { matchedWorkday.push(ALL_ADDTIONALWORKDAYS[i]); break; } } return matchedWorkday.length === 1 ? true : false; } else { return !isHoliday(fmtDate); } } /** * 查找日期范围内的节假日,包含开始日期和结束日期 * @param start 开始日期 * @param end 结束日期,如果没有传结束日期,返回开始日期后的所有节假日 */ function findHolidays(start, end) { var matchedHolidays = []; var fmtStartDate = dayjs(start).format("YYYY-MM-DD"); var fmtEndDate = dayjs(end).format("YYYY-MM-DD"); if (dayjs(fmtStartDate).isAfter(dayjs(fmtEndDate))) return console.error("startTime must before endTime"); // 开始时间必须比结束时间早 if (end) { for (var i = 0; i < ALL_HOLIDAYS.length; i++) { if (dayjs(ALL_HOLIDAYS[i].date).isBetween(fmtStartDate, fmtEndDate, "day", "[]")) { matchedHolidays.push(ALL_HOLIDAYS[i]); } } } else { for (var _i = 0; _i < ALL_HOLIDAYS.length; _i++) { if (dayjs(ALL_HOLIDAYS[_i].date).isSameOrAfter(fmtStartDate, "day")) { matchedHolidays.push(ALL_HOLIDAYS[_i]); } } } return matchedHolidays; } export default { isHoliday: isHoliday, isWorkday: isWorkday, findHolidays: findHolidays };