@chnlib/chinese-holiday
Version:
114 lines (108 loc) • 7.74 kB
JavaScript
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
};