Comparing version 1.1.2 to 1.1.3
@@ -1,2 +0,12 @@ | ||
/******/ (function(modules) { // webpackBootstrap | ||
(function webpackUniversalModuleDefinition(root, factory) { | ||
if(typeof exports === 'object' && typeof module === 'object') | ||
module.exports = factory(); | ||
else if(typeof define === 'function' && define.amd) | ||
define([], factory); | ||
else if(typeof exports === 'object') | ||
exports["pascua"] = factory(); | ||
else | ||
root["pascua"] = factory(); | ||
})(window, function() { | ||
return /******/ (function(modules) { // webpackBootstrap | ||
/******/ // The module cache | ||
@@ -81,3 +91,3 @@ /******/ var installedModules = {}; | ||
eval("module.exports = [{\"type\":1,\"name\":\"Año Nuevo\",\"day\":1,\"month\":1},{\"type\":1,\"name\":\"Día del Trabajo\",\"day\":1,\"month\":5},{\"type\":1,\"name\":\"Grito de la Independencia\",\"day\":20,\"month\":7},{\"type\":1,\"name\":\"Batalla de Boyacá\",\"day\":7,\"month\":8},{\"type\":1,\"name\":\"Inmaculada Concepción\",\"day\":8,\"month\":12},{\"type\":1,\"name\":\"Navidad\",\"day\":25,\"month\":12},{\"type\":2,\"name\":\"Reyes Magos\",\"day\":6,\"month\":1},{\"type\":2,\"name\":\"San José\",\"day\":19,\"month\":3},{\"type\":2,\"name\":\"San Pedro y San Pablo\",\"day\":29,\"month\":6},{\"type\":2,\"name\":\"Asunción de la Virgen\",\"day\":15,\"month\":8},{\"type\":2,\"name\":\"Día de la Raza\",\"day\":12,\"month\":10},{\"type\":2,\"name\":\"Todos los Santos\",\"day\":1,\"month\":11},{\"type\":2,\"name\":\"Independencia de Cartagena\",\"day\":11,\"month\":11},{\"type\":3,\"name\":\"Jueves Santo\",\"offset\":-3},{\"type\":3,\"name\":\"Viernes Santo\",\"offset\":-2},{\"type\":3,\"name\":\"Ascensión de Jesús\",\"offset\":43},{\"type\":3,\"name\":\"Corpus Christi\",\"offset\":64},{\"type\":3,\"name\":\"Sagrado Corazón de Jesús\",\"offset\":71}];\n\n//# sourceURL=webpack:///./src/holidays.json?"); | ||
module.exports = [{"type":1,"name":"Año Nuevo","day":1,"month":1},{"type":1,"name":"Día del Trabajo","day":1,"month":5},{"type":1,"name":"Grito de la Independencia","day":20,"month":7},{"type":1,"name":"Batalla de Boyacá","day":7,"month":8},{"type":1,"name":"Inmaculada Concepción","day":8,"month":12},{"type":1,"name":"Navidad","day":25,"month":12},{"type":2,"name":"Reyes Magos","day":6,"month":1},{"type":2,"name":"San José","day":19,"month":3},{"type":2,"name":"San Pedro y San Pablo","day":29,"month":6},{"type":2,"name":"Asunción de la Virgen","day":15,"month":8},{"type":2,"name":"Día de la Raza","day":12,"month":10},{"type":2,"name":"Todos los Santos","day":1,"month":11},{"type":2,"name":"Independencia de Cartagena","day":11,"month":11},{"type":3,"name":"Jueves Santo","offset":-3},{"type":3,"name":"Viernes Santo","offset":-2},{"type":3,"name":"Ascensión de Jesús","offset":43},{"type":3,"name":"Corpus Christi","offset":64},{"type":3,"name":"Sagrado Corazón de Jesús","offset":71}]; | ||
@@ -90,10 +100,282 @@ /***/ }), | ||
\**********************/ | ||
/*! exports provided: getHoliday, getAllHolidays */ | ||
/***/ (function(module, __webpack_exports__, __webpack_require__) { | ||
/*! no static exports found */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
"use strict"; | ||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getHoliday\", function() { return getHoliday; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getAllHolidays\", function() { return getAllHolidays; });\n/* harmony import */ var _holidays_json__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./holidays.json */ \"./src/holidays.json\");\nvar _holidays_json__WEBPACK_IMPORTED_MODULE_0___namespace = /*#__PURE__*/Object.assign({}, _holidays_json__WEBPACK_IMPORTED_MODULE_0__, {\"default\": _holidays_json__WEBPACK_IMPORTED_MODULE_0__});\n\n\n/**\n * Valida si el año pasado como argumento es un número entero mayor a 1983. En 1983 se expide la ley\n * por la cual se corren algunos festivos al próximo lunes:\n * http://www.alcaldiabogota.gov.co/sisjur/normas/Norma1.jsp?i=4954\n * @param {number} year El año para el cual se desea obtener los días festivos. Mayor a 1983.\n */\nfunction validateYear(year) {\n const int = Number.parseInt(year, 10);\n if (!Number.isNaN(int) && int > 1983) {\n return int;\n }\n throw new Error(\"Invalid year. Should be an integer > 1983\");\n}\n\n/**\n * Devuelve verdadero si el argumento pasado corresponde a un objeto de tipo fecha de JavaScript y\n * si el año de esa fecha es mayor a 1983, que es el año en el que se establece el decreto que rige\n * los festivos actuales:\n * http://www.alcaldiabogota.gov.co/sisjur/normas/Norma1.jsp?i=4954\n * @param {any} date La fecha que se desea validar.\n */\nfunction isValidDate(date) {\n return (\n Object.prototype.toString.call(date) === \"[object Date]\" &&\n validateYear(date.getFullYear())\n );\n}\n\n/**\n * Devuelve una cadena de texto en formato ISO 8601 que representa la fecha local correspondiente a\n * la fecha almacenada en el objeto Date pasado como argumento. El formato devuelto es el siguiente:\n * YYYY-MM-DDThh:mm:ss.sssTZD (eg 1997-07-16T19:20:30.453+01:00)\n * En donde:\n * YYYY = four-digit year\n * MM = two-digit month (01=January, etc.)\n * DD = two-digit day of month (01 through 31)\n * hh = two digits of hour (00 through 23) (am/pm NOT allowed)\n * mm = two digits of minute (00 through 59)\n * ss = two digits of second (00 through 59)\n * s = one or more digits representing a decimal fraction of a second\n * TZD = time zone designator (Z or +hh:mm or -hh:mm)\n * @param {object} date Objeto tipo Date de JavaScript\n * @param {string} timeOffset Desplazamiento horario por defecto '05:00' = 'America/Bogota'\n */\nfunction toISOString(date, timeOffset = \"-05:00\") {\n const year = date.getFullYear();\n const month = date.getMonth() + 1;\n const day = date.getDate();\n const sMonth = month < 10 ? `0${month}` : month;\n const sDay = day < 10 ? `0${day}` : day;\n return `${year}-${sMonth}-${sDay}T00:00:00.000${timeOffset}`;\n}\n\n/**\n * Devuelve un objecto Date creado a partir de una fecha en formato ISO 8601. Al crear un objecto\n * Date con un texto en formato ISO 8601 JavaScript lo interpreta como UTC y no como hora local, lo\n * que permite mantener una sistema estándarizado dentro del módulo usando siempre UTC. Por ello,\n * las fechas en el módulo se crean con esta función y así se preservan en UTC y hay menos\n * probabilidad de tener conflictos entre fechas por saltos de zona horaria.\n * Leer este artículo para entender un poco mejor el problema de la interpretación de las fechas\n * en JavaScript: https://codeofmatt.com/2015/06/17/javascript-date-parsing-changes-in-es6/\n * @param {number} year Año correspondiente a la fecha.\n * @param {number} month Mes correspondiente a la fecha. 1 = Enero.\n * @param {number} day Día correspondiente a la fecha.\n * @param {number} timeOffset El desplazamiento de la zona horaria. Por defecto = '-05:00'.\n */\nfunction getISODate(year, month, day, timeOffset = \"-05:00\") {\n const sMonth = month < 10 ? `0${month}` : month;\n const sDay = day < 10 ? `0${day}` : day;\n return new Date(`${year}-${sMonth}-${sDay}T00:00:00.000${timeOffset}`);\n}\n\n/**\n * Devuelve una nueva fecha sin mutar la fecha original pasada como argumento, a la que se le han\n * sumado los días especificados en el argumento amount.\n * @param {object} date Fecha tipo JavaScript.\n * @param {number} amount Días que se desean sumar.\n */\nfunction addDays(date, amount) {\n const resultDate = new Date(date.getTime());\n resultDate.setDate(resultDate.getDate() + amount);\n return resultDate;\n}\n\n/**\n * Devuelve true o false según dos fechas sean las mismas. La comparación se hace a nivel de día,\n * por lo que no se tiene en cuenta las horas sino sólo si son o no el mismo día del mismo mes del\n * mismo año.\n * @param {object} date1 Objeto fecha de JavaScript\n * @param {object} date2 Objeto fecha de JavaScript\n */\nfunction isSameDate(date1, date2) {\n if (date1.getDate() !== date2.getDate()) {\n return false;\n }\n if (date1.getMonth() !== date2.getMonth()) {\n return false;\n }\n // No necesitamos comparar el año ya que el festivo siempre lo creamos a partir del año de la\n // fecha que se pasó como argumento inicial, por lo tanto siempre estamos comparando fechas del\n // mismo año.\n return true;\n}\n\n/**\n * Devuelve el próximo día de la semana especificado en el argumento 'dayOfWeek' a partir de la\n * fecha especificada. Por ejemplo, para obtener el lunes siguiente a una fecha especificada se\n * usaría:\n * const nextMonday = getNextDayOfWeek(fecha, 1);\n * Si la fecha corresponde al mismo día solicitado se devuelve la misma fecha. En el caso anterior\n * si la 'fecha' pasada como argumento es lunes, entonces la función devolverá la misma fecha.\n * Basado en: https://codereview.stackexchange.com/a/33532/146118\n * @param {object} date Objeto fecha de JavaScript\n * @param {number} dayOfWeek Día de la semana que se desea. 0 = Domingo.\n */\nfunction getNextDayOfWeek(date, dayOfWeek) {\n const resultDate = new Date(date.getTime());\n resultDate.setDate(date.getDate() + (7 + dayOfWeek - date.getDay()) % 7);\n return resultDate;\n}\n\n/**\n * Devuelve la fecha que corresponde al domingo de Pascua para el año indicado usando el algoritmo\n * de Butcher: https://es.wikipedia.org/wiki/Computus#C.C3.A1lculo\n * Las fiestas correspondientes a la Pascua se calculan con referencia a esta fecha de la siguiente\n * forma:\n * Pascua -7 : Domingo de Ramos\n * Pascua -3 : Jueves Santo\n * Pascua -2 : Viernes Santo\n * Pascua : Domingo de Pascua\n * Pascua +43 : Ascensión de Jesús\n * Pascua +64 : Corpus Christi\n * Pascua +71 : Sagrado Corazón de Jesús\n * Ni el 'Domingo de Pascua' como tal, ni el 'Domingo de Ramos' se consideran días festivos.\n * @param {number} year Año para el cual se desea saber el Domingo de Pascua.\n * @param {string} timeOffset Desplazamiento de la zona horaria. Por defecto es '-05:00'.\n */\nfunction getPascua(year, timeOffset = \"-05:00\") {\n const A = year % 19;\n const B = Math.floor(year / 100);\n const C = year % 100;\n const D = Math.floor(B / 4);\n const E = B % 4;\n const F = Math.floor((B + 8) / 25);\n const G = Math.floor((B - F + 1) / 3);\n const H = (19 * A + B - D - G + 15) % 30;\n const I = Math.floor(C / 4);\n const K = C % 4;\n const L = (32 + 2 * E + 2 * I - H - K) % 7;\n const M = Math.floor((A + 11 * H + 22 * L) / 451);\n const N = H + L - 7 * M + 114;\n const month = Math.floor(N / 31);\n const day = 1 + N % 31;\n const pascua = getISODate(year, month, day, timeOffset);\n return pascua;\n}\n\n/**\n * Devuelve el nombre del festivo correspondiente a la fecha indicada si la fecha indicada es\n * festivo, de lo contrario devuelve false.\n * Exiten tres tipos de festivos en Colombia:\n * 1. De fecha fija: Siempre se celebra el día correspondiente a ese fecha. Ej. 25 de diciembre.\n * 2. Próximo lunes: Se celebra el lunes siguiente a la fecha en que cae el festivo. Ej. 6 de\n * enero. Si cae en lunes, se celebra ese mismo día.\n * 3. Respecto a la Pascua: Se celebran según la diferencia con respecto al domingo de Pascua para\n * ese año. Ej. Domingo de Pascua +45 días (Ascensión de Jesús).\n * @param {object} date Objeto tipo fecha para el cual se desea saber si es festivo.\n * @param {string} timeOffset Desplazamiento de la zona horaria. Por defecto es '-05:00'.\n */\nfunction getHoliday(date = new Date(), timeOffset = \"-05:00\") {\n if (!isValidDate(date)) {\n throw new Error(\"Invalid date.\");\n }\n const year = date.getFullYear();\n for (let i = 0; i < _holidays_json__WEBPACK_IMPORTED_MODULE_0__.length; i += 1) {\n if (_holidays_json__WEBPACK_IMPORTED_MODULE_0__[i].type === 1) {\n const holiday = getISODate(\n year,\n _holidays_json__WEBPACK_IMPORTED_MODULE_0__[i].month,\n _holidays_json__WEBPACK_IMPORTED_MODULE_0__[i].day,\n timeOffset\n );\n if (isSameDate(date, holiday)) {\n return _holidays_json__WEBPACK_IMPORTED_MODULE_0__[i].name;\n }\n }\n if (_holidays_json__WEBPACK_IMPORTED_MODULE_0__[i].type === 2) {\n const holiday = getISODate(\n year,\n _holidays_json__WEBPACK_IMPORTED_MODULE_0__[i].month,\n _holidays_json__WEBPACK_IMPORTED_MODULE_0__[i].day,\n timeOffset\n );\n const nextMonday = getNextDayOfWeek(holiday, 1);\n if (isSameDate(date, nextMonday)) {\n return _holidays_json__WEBPACK_IMPORTED_MODULE_0__[i].name;\n }\n }\n if (_holidays_json__WEBPACK_IMPORTED_MODULE_0__[i].type === 3) {\n const pascua = getPascua(year, timeOffset);\n const pascuaHoliday = addDays(pascua, _holidays_json__WEBPACK_IMPORTED_MODULE_0__[i].offset);\n if (isSameDate(date, pascuaHoliday)) {\n return _holidays_json__WEBPACK_IMPORTED_MODULE_0__[i].name;\n }\n }\n }\n return \"\";\n}\n\n/**\n * Devuelve un array de objectos con todos los festivos del año indicado, en donde cada objeto\n * contiene la información de un día festivo. Por ejemplo, para el 2010 devolverá el siguiente\n * array:\n * [\n * { date: '2010-01-01T00:00:00.000-05:00', type: '1', name: 'Año Nuevo' },\n * { date: '2010-05-01T00:00:00.000-05:00', type: '1', name: 'Día del Trabajo' },\n * { date: '2010-07-20T00:00:00.000-05:00', type: '1', name: 'Grito de la Independencia' },\n * { date: '2010-08-07T00:00:00.000-05:00', type: '1', name: 'Batalla de Boyacá' },\n * { date: '2010-12-08T00:00:00.000-05:00', type: '1', name: 'Inmaculada Concepción' },\n * { date: '2010-12-25T00:00:00.000-05:00', type: '1', name: 'Navidad' },\n * { date: '2010-01-11T00:00:00.000-05:00', type: '2', name: 'Reyes Magos' },\n * { date: '2010-03-22T00:00:00.000-05:00', type: '2', name: 'San José' },\n * { date: '2010-07-05T00:00:00.000-05:00', type: '2', name: 'San Pedro y San Pablo' },\n * { date: '2010-08-16T00:00:00.000-05:00', type: '2', name: 'Asunción de la Virgen' },\n * { date: '2010-10-18T00:00:00.000-05:00', type: '2', name: 'Día de la Raza' },\n * { date: '2010-11-01T00:00:00.000-05:00', type: '2', name: 'Todos los Santos' },\n * { date: '2010-11-15T00:00:00.000-05:00', type: '2', name: 'Independencia de Cartagena' },\n * { date: '2010-04-01T00:00:00.000-05:00', type: '3', name: 'Jueves Santo' },\n * { date: '2010-04-02T00:00:00.000-05:00', type: '3', name: 'Viernes Santo' },\n * { date: '2010-05-17T00:00:00.000-05:00', type: '3', name: 'Ascensión de Jesús' },\n * { date: '2010-06-07T00:00:00.000-05:00', type: '3', name: 'Corpus Christi' },\n * { date: '2010-06-14T00:00:00.000-05:00', type: '3', name: 'Sagrado Corazón de Jesús' },\n * ]\n * @param {number} year El año para el cual deseamos saber los festivos\n */\nfunction getAllHolidays(year = new Date().getFullYear()) {\n const validYear = validateYear(year);\n const yearHolidays = [];\n for (let i = 0; i < _holidays_json__WEBPACK_IMPORTED_MODULE_0__.length; i += 1) {\n let holidayDate;\n if (_holidays_json__WEBPACK_IMPORTED_MODULE_0__[i].type === 1) {\n holidayDate = getISODate(validYear, _holidays_json__WEBPACK_IMPORTED_MODULE_0__[i].month, _holidays_json__WEBPACK_IMPORTED_MODULE_0__[i].day);\n }\n if (_holidays_json__WEBPACK_IMPORTED_MODULE_0__[i].type === 2) {\n holidayDate = getNextDayOfWeek(\n getISODate(validYear, _holidays_json__WEBPACK_IMPORTED_MODULE_0__[i].month, _holidays_json__WEBPACK_IMPORTED_MODULE_0__[i].day),\n 1\n );\n }\n if (_holidays_json__WEBPACK_IMPORTED_MODULE_0__[i].type === 3) {\n holidayDate = addDays(getPascua(validYear), _holidays_json__WEBPACK_IMPORTED_MODULE_0__[i].offset);\n }\n yearHolidays.push({\n date: toISOString(holidayDate),\n type: _holidays_json__WEBPACK_IMPORTED_MODULE_0__[i].type,\n name: _holidays_json__WEBPACK_IMPORTED_MODULE_0__[i].name\n });\n }\n return yearHolidays;\n}\n\n\n\n\n//# sourceURL=webpack:///./src/index.js?"); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.getAllHolidays = exports.getHoliday = undefined; | ||
var _holidays = __webpack_require__(/*! ./holidays.json */ "./src/holidays.json"); | ||
var _holidays2 = _interopRequireDefault(_holidays); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
/** | ||
* Valida si el año pasado como argumento es un número entero mayor a 1983. En 1983 se expide la ley | ||
* por la cual se corren algunos festivos al próximo lunes: | ||
* http://www.alcaldiabogota.gov.co/sisjur/normas/Norma1.jsp?i=4954 | ||
* @param {number} year El año para el cual se desea obtener los días festivos. Mayor a 1983. | ||
*/ | ||
function validateYear(year) { | ||
var int = Number.parseInt(year, 10); | ||
if (!Number.isNaN(int) && int > 1983) { | ||
return int; | ||
} | ||
throw new Error("Invalid year. Should be an integer > 1983"); | ||
} | ||
/** | ||
* Devuelve verdadero si el argumento pasado corresponde a un objeto de tipo fecha de JavaScript y | ||
* si el año de esa fecha es mayor a 1983, que es el año en el que se establece el decreto que rige | ||
* los festivos actuales: | ||
* http://www.alcaldiabogota.gov.co/sisjur/normas/Norma1.jsp?i=4954 | ||
* @param {any} date La fecha que se desea validar. | ||
*/ | ||
function isValidDate(date) { | ||
return Object.prototype.toString.call(date) === "[object Date]" && validateYear(date.getFullYear()); | ||
} | ||
/** | ||
* Devuelve una cadena de texto en formato ISO 8601 que representa la fecha local correspondiente a | ||
* la fecha almacenada en el objeto Date pasado como argumento. El formato devuelto es el siguiente: | ||
* YYYY-MM-DDThh:mm:ss.sssTZD (eg 1997-07-16T19:20:30.453+01:00) | ||
* En donde: | ||
* YYYY = four-digit year | ||
* MM = two-digit month (01=January, etc.) | ||
* DD = two-digit day of month (01 through 31) | ||
* hh = two digits of hour (00 through 23) (am/pm NOT allowed) | ||
* mm = two digits of minute (00 through 59) | ||
* ss = two digits of second (00 through 59) | ||
* s = one or more digits representing a decimal fraction of a second | ||
* TZD = time zone designator (Z or +hh:mm or -hh:mm) | ||
* @param {object} date Objeto tipo Date de JavaScript | ||
* @param {string} timeOffset Desplazamiento horario por defecto '05:00' = 'America/Bogota' | ||
*/ | ||
function toISOString(date) { | ||
var timeOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "-05:00"; | ||
var year = date.getFullYear(); | ||
var month = date.getMonth() + 1; | ||
var day = date.getDate(); | ||
var sMonth = month < 10 ? "0" + month : month; | ||
var sDay = day < 10 ? "0" + day : day; | ||
return year + "-" + sMonth + "-" + sDay + "T00:00:00.000" + timeOffset; | ||
} | ||
/** | ||
* Devuelve un objecto Date creado a partir de una fecha en formato ISO 8601. Al crear un objecto | ||
* Date con un texto en formato ISO 8601 JavaScript lo interpreta como UTC y no como hora local, lo | ||
* que permite mantener una sistema estándarizado dentro del módulo usando siempre UTC. Por ello, | ||
* las fechas en el módulo se crean con esta función y así se preservan en UTC y hay menos | ||
* probabilidad de tener conflictos entre fechas por saltos de zona horaria. | ||
* Leer este artículo para entender un poco mejor el problema de la interpretación de las fechas | ||
* en JavaScript: https://codeofmatt.com/2015/06/17/javascript-date-parsing-changes-in-es6/ | ||
* @param {number} year Año correspondiente a la fecha. | ||
* @param {number} month Mes correspondiente a la fecha. 1 = Enero. | ||
* @param {number} day Día correspondiente a la fecha. | ||
* @param {number} timeOffset El desplazamiento de la zona horaria. Por defecto = '-05:00'. | ||
*/ | ||
function getISODate(year, month, day) { | ||
var timeOffset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "-05:00"; | ||
var sMonth = month < 10 ? "0" + month : month; | ||
var sDay = day < 10 ? "0" + day : day; | ||
return new Date(year + "-" + sMonth + "-" + sDay + "T00:00:00.000" + timeOffset); | ||
} | ||
/** | ||
* Devuelve una nueva fecha sin mutar la fecha original pasada como argumento, a la que se le han | ||
* sumado los días especificados en el argumento amount. | ||
* @param {object} date Fecha tipo JavaScript. | ||
* @param {number} amount Días que se desean sumar. | ||
*/ | ||
function addDays(date, amount) { | ||
var resultDate = new Date(date.getTime()); | ||
resultDate.setDate(resultDate.getDate() + amount); | ||
return resultDate; | ||
} | ||
/** | ||
* Devuelve true o false según dos fechas sean las mismas. La comparación se hace a nivel de día, | ||
* por lo que no se tiene en cuenta las horas sino sólo si son o no el mismo día del mismo mes del | ||
* mismo año. | ||
* @param {object} date1 Objeto fecha de JavaScript | ||
* @param {object} date2 Objeto fecha de JavaScript | ||
*/ | ||
function isSameDate(date1, date2) { | ||
if (date1.getDate() !== date2.getDate()) { | ||
return false; | ||
} | ||
if (date1.getMonth() !== date2.getMonth()) { | ||
return false; | ||
} | ||
// No necesitamos comparar el año ya que el festivo siempre lo creamos a partir del año de la | ||
// fecha que se pasó como argumento inicial, por lo tanto siempre estamos comparando fechas del | ||
// mismo año. | ||
return true; | ||
} | ||
/** | ||
* Devuelve el próximo día de la semana especificado en el argumento 'dayOfWeek' a partir de la | ||
* fecha especificada. Por ejemplo, para obtener el lunes siguiente a una fecha especificada se | ||
* usaría: | ||
* const nextMonday = getNextDayOfWeek(fecha, 1); | ||
* Si la fecha corresponde al mismo día solicitado se devuelve la misma fecha. En el caso anterior | ||
* si la 'fecha' pasada como argumento es lunes, entonces la función devolverá la misma fecha. | ||
* Basado en: https://codereview.stackexchange.com/a/33532/146118 | ||
* @param {object} date Objeto fecha de JavaScript | ||
* @param {number} dayOfWeek Día de la semana que se desea. 0 = Domingo. | ||
*/ | ||
function getNextDayOfWeek(date, dayOfWeek) { | ||
var resultDate = new Date(date.getTime()); | ||
resultDate.setDate(date.getDate() + (7 + dayOfWeek - date.getDay()) % 7); | ||
return resultDate; | ||
} | ||
/** | ||
* Devuelve la fecha que corresponde al domingo de Pascua para el año indicado usando el algoritmo | ||
* de Butcher: https://es.wikipedia.org/wiki/Computus#C.C3.A1lculo | ||
* Las fiestas correspondientes a la Pascua se calculan con referencia a esta fecha de la siguiente | ||
* forma: | ||
* Pascua -7 : Domingo de Ramos | ||
* Pascua -3 : Jueves Santo | ||
* Pascua -2 : Viernes Santo | ||
* Pascua : Domingo de Pascua | ||
* Pascua +43 : Ascensión de Jesús | ||
* Pascua +64 : Corpus Christi | ||
* Pascua +71 : Sagrado Corazón de Jesús | ||
* Ni el 'Domingo de Pascua' como tal, ni el 'Domingo de Ramos' se consideran días festivos. | ||
* @param {number} year Año para el cual se desea saber el Domingo de Pascua. | ||
* @param {string} timeOffset Desplazamiento de la zona horaria. Por defecto es '-05:00'. | ||
*/ | ||
function getPascua(year) { | ||
var timeOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "-05:00"; | ||
var A = year % 19; | ||
var B = Math.floor(year / 100); | ||
var C = year % 100; | ||
var D = Math.floor(B / 4); | ||
var E = B % 4; | ||
var F = Math.floor((B + 8) / 25); | ||
var G = Math.floor((B - F + 1) / 3); | ||
var H = (19 * A + B - D - G + 15) % 30; | ||
var I = Math.floor(C / 4); | ||
var K = C % 4; | ||
var L = (32 + 2 * E + 2 * I - H - K) % 7; | ||
var M = Math.floor((A + 11 * H + 22 * L) / 451); | ||
var N = H + L - 7 * M + 114; | ||
var month = Math.floor(N / 31); | ||
var day = 1 + N % 31; | ||
var pascua = getISODate(year, month, day, timeOffset); | ||
return pascua; | ||
} | ||
/** | ||
* Devuelve el nombre del festivo correspondiente a la fecha indicada si la fecha indicada es | ||
* festivo, de lo contrario devuelve false. | ||
* Exiten tres tipos de festivos en Colombia: | ||
* 1. De fecha fija: Siempre se celebra el día correspondiente a ese fecha. Ej. 25 de diciembre. | ||
* 2. Próximo lunes: Se celebra el lunes siguiente a la fecha en que cae el festivo. Ej. 6 de | ||
* enero. Si cae en lunes, se celebra ese mismo día. | ||
* 3. Respecto a la Pascua: Se celebran según la diferencia con respecto al domingo de Pascua para | ||
* ese año. Ej. Domingo de Pascua +45 días (Ascensión de Jesús). | ||
* @param {object} date Objeto tipo fecha para el cual se desea saber si es festivo. | ||
* @param {string} timeOffset Desplazamiento de la zona horaria. Por defecto es '-05:00'. | ||
*/ | ||
function getHoliday() { | ||
var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date(); | ||
var timeOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "-05:00"; | ||
if (!isValidDate(date)) { | ||
throw new Error("Invalid date."); | ||
} | ||
var year = date.getFullYear(); | ||
for (var i = 0; i < _holidays2.default.length; i += 1) { | ||
if (_holidays2.default[i].type === 1) { | ||
var holiday = getISODate(year, _holidays2.default[i].month, _holidays2.default[i].day, timeOffset); | ||
if (isSameDate(date, holiday)) { | ||
return _holidays2.default[i].name; | ||
} | ||
} | ||
if (_holidays2.default[i].type === 2) { | ||
var _holiday = getISODate(year, _holidays2.default[i].month, _holidays2.default[i].day, timeOffset); | ||
var nextMonday = getNextDayOfWeek(_holiday, 1); | ||
if (isSameDate(date, nextMonday)) { | ||
return _holidays2.default[i].name; | ||
} | ||
} | ||
if (_holidays2.default[i].type === 3) { | ||
var pascua = getPascua(year, timeOffset); | ||
var pascuaHoliday = addDays(pascua, _holidays2.default[i].offset); | ||
if (isSameDate(date, pascuaHoliday)) { | ||
return _holidays2.default[i].name; | ||
} | ||
} | ||
} | ||
return ""; | ||
} | ||
/** | ||
* Devuelve un array de objectos con todos los festivos del año indicado, en donde cada objeto | ||
* contiene la información de un día festivo. Por ejemplo, para el 2010 devolverá el siguiente | ||
* array: | ||
* [ | ||
* { date: '2010-01-01T00:00:00.000-05:00', type: '1', name: 'Año Nuevo' }, | ||
* { date: '2010-05-01T00:00:00.000-05:00', type: '1', name: 'Día del Trabajo' }, | ||
* { date: '2010-07-20T00:00:00.000-05:00', type: '1', name: 'Grito de la Independencia' }, | ||
* { date: '2010-08-07T00:00:00.000-05:00', type: '1', name: 'Batalla de Boyacá' }, | ||
* { date: '2010-12-08T00:00:00.000-05:00', type: '1', name: 'Inmaculada Concepción' }, | ||
* { date: '2010-12-25T00:00:00.000-05:00', type: '1', name: 'Navidad' }, | ||
* { date: '2010-01-11T00:00:00.000-05:00', type: '2', name: 'Reyes Magos' }, | ||
* { date: '2010-03-22T00:00:00.000-05:00', type: '2', name: 'San José' }, | ||
* { date: '2010-07-05T00:00:00.000-05:00', type: '2', name: 'San Pedro y San Pablo' }, | ||
* { date: '2010-08-16T00:00:00.000-05:00', type: '2', name: 'Asunción de la Virgen' }, | ||
* { date: '2010-10-18T00:00:00.000-05:00', type: '2', name: 'Día de la Raza' }, | ||
* { date: '2010-11-01T00:00:00.000-05:00', type: '2', name: 'Todos los Santos' }, | ||
* { date: '2010-11-15T00:00:00.000-05:00', type: '2', name: 'Independencia de Cartagena' }, | ||
* { date: '2010-04-01T00:00:00.000-05:00', type: '3', name: 'Jueves Santo' }, | ||
* { date: '2010-04-02T00:00:00.000-05:00', type: '3', name: 'Viernes Santo' }, | ||
* { date: '2010-05-17T00:00:00.000-05:00', type: '3', name: 'Ascensión de Jesús' }, | ||
* { date: '2010-06-07T00:00:00.000-05:00', type: '3', name: 'Corpus Christi' }, | ||
* { date: '2010-06-14T00:00:00.000-05:00', type: '3', name: 'Sagrado Corazón de Jesús' }, | ||
* ] | ||
* @param {number} year El año para el cual deseamos saber los festivos | ||
*/ | ||
function getAllHolidays() { | ||
var year = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date().getFullYear(); | ||
var validYear = validateYear(year); | ||
var yearHolidays = []; | ||
for (var i = 0; i < _holidays2.default.length; i += 1) { | ||
var holidayDate = void 0; | ||
if (_holidays2.default[i].type === 1) { | ||
holidayDate = getISODate(validYear, _holidays2.default[i].month, _holidays2.default[i].day); | ||
} | ||
if (_holidays2.default[i].type === 2) { | ||
holidayDate = getNextDayOfWeek(getISODate(validYear, _holidays2.default[i].month, _holidays2.default[i].day), 1); | ||
} | ||
if (_holidays2.default[i].type === 3) { | ||
holidayDate = addDays(getPascua(validYear), _holidays2.default[i].offset); | ||
} | ||
yearHolidays.push({ | ||
date: toISOString(holidayDate), | ||
type: _holidays2.default[i].type, | ||
name: _holidays2.default[i].name | ||
}); | ||
} | ||
return yearHolidays; | ||
} | ||
exports.getHoliday = getHoliday; | ||
exports.getAllHolidays = getAllHolidays; | ||
/***/ }) | ||
/******/ }); | ||
/******/ }); | ||
}); | ||
//# sourceMappingURL=pascua.umd.js.map |
@@ -1,1 +0,2 @@ | ||
!function(e){var t={};function n(a){if(t[a])return t[a].exports;var o=t[a]={i:a,l:!1,exports:{}};return e[a].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:a})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e){e.exports=[{type:1,name:"Año Nuevo",day:1,month:1},{type:1,name:"Día del Trabajo",day:1,month:5},{type:1,name:"Grito de la Independencia",day:20,month:7},{type:1,name:"Batalla de Boyacá",day:7,month:8},{type:1,name:"Inmaculada Concepción",day:8,month:12},{type:1,name:"Navidad",day:25,month:12},{type:2,name:"Reyes Magos",day:6,month:1},{type:2,name:"San José",day:19,month:3},{type:2,name:"San Pedro y San Pablo",day:29,month:6},{type:2,name:"Asunción de la Virgen",day:15,month:8},{type:2,name:"Día de la Raza",day:12,month:10},{type:2,name:"Todos los Santos",day:1,month:11},{type:2,name:"Independencia de Cartagena",day:11,month:11},{type:3,name:"Jueves Santo",offset:-3},{type:3,name:"Viernes Santo",offset:-2},{type:3,name:"Ascensión de Jesús",offset:43},{type:3,name:"Corpus Christi",offset:64},{type:3,name:"Sagrado Corazón de Jesús",offset:71}]},function(e,t,n){"use strict";n.r(t),n.d(t,"getHoliday",function(){return l}),n.d(t,"getAllHolidays",function(){return s});var a=n(0);function o(e){const t=Number.parseInt(e,10);if(!Number.isNaN(t)&&t>1983)return t;throw new Error("Invalid year. Should be an integer > 1983")}function r(e,t="-05:00"){const n=e.getFullYear(),a=e.getMonth()+1,o=e.getDate();return`${n}-${a<10?`0${a}`:a}-${o<10?`0${o}`:o}T00:00:00.000${t}`}function u(e,t,n,a="-05:00"){const o=t<10?`0${t}`:t,r=n<10?`0${n}`:n;return new Date(`${e}-${o}-${r}T00:00:00.000${a}`)}function f(e,t){const n=new Date(e.getTime());return n.setDate(n.getDate()+t),n}function i(e,t){return e.getDate()===t.getDate()&&e.getMonth()===t.getMonth()}function y(e,t){const n=new Date(e.getTime());return n.setDate(e.getDate()+(7+t-e.getDay())%7),n}function d(e,t="-05:00"){const n=e%19,a=Math.floor(e/100),o=e%100,r=Math.floor(a/4),f=a%4,i=Math.floor((a+8)/25),y=(19*n+a-r-Math.floor((a-i+1)/3)+15)%30,d=(32+2*f+2*Math.floor(o/4)-y-o%4)%7,l=y+d-7*Math.floor((n+11*y+22*d)/451)+114;return u(e,Math.floor(l/31),1+l%31,t)}function l(e=new Date,t="-05:00"){if(!function(e){return"[object Date]"===Object.prototype.toString.call(e)&&o(e.getFullYear())}(e))throw new Error("Invalid date.");const n=e.getFullYear();for(let o=0;o<a.length;o+=1){if(1===a[o].type){if(i(e,u(n,a[o].month,a[o].day,t)))return a[o].name}if(2===a[o].type){if(i(e,y(u(n,a[o].month,a[o].day,t),1)))return a[o].name}if(3===a[o].type){if(i(e,f(d(n,t),a[o].offset)))return a[o].name}}return""}function s(e=(new Date).getFullYear()){const t=o(e),n=[];for(let e=0;e<a.length;e+=1){let o;1===a[e].type&&(o=u(t,a[e].month,a[e].day)),2===a[e].type&&(o=y(u(t,a[e].month,a[e].day),1)),3===a[e].type&&(o=f(d(t),a[e].offset)),n.push({date:r(o),type:a[e].type,name:a[e].name})}return n}}]); | ||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.pascua=t():e.pascua=t()}(window,function(){return function(e){var t={};function n(a){if(t[a])return t[a].exports;var o=t[a]={i:a,l:!1,exports:{}};return e[a].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:a})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e){e.exports=[{type:1,name:"Año Nuevo",day:1,month:1},{type:1,name:"Día del Trabajo",day:1,month:5},{type:1,name:"Grito de la Independencia",day:20,month:7},{type:1,name:"Batalla de Boyacá",day:7,month:8},{type:1,name:"Inmaculada Concepción",day:8,month:12},{type:1,name:"Navidad",day:25,month:12},{type:2,name:"Reyes Magos",day:6,month:1},{type:2,name:"San José",day:19,month:3},{type:2,name:"San Pedro y San Pablo",day:29,month:6},{type:2,name:"Asunción de la Virgen",day:15,month:8},{type:2,name:"Día de la Raza",day:12,month:10},{type:2,name:"Todos los Santos",day:1,month:11},{type:2,name:"Independencia de Cartagena",day:11,month:11},{type:3,name:"Jueves Santo",offset:-3},{type:3,name:"Viernes Santo",offset:-2},{type:3,name:"Ascensión de Jesús",offset:43},{type:3,name:"Corpus Christi",offset:64},{type:3,name:"Sagrado Corazón de Jesús",offset:71}]},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getAllHolidays=t.getHoliday=void 0;var a,o=n(0),r=(a=o)&&a.__esModule?a:{default:a};function u(e){var t=Number.parseInt(e,10);if(!Number.isNaN(t)&&t>1983)return t;throw new Error("Invalid year. Should be an integer > 1983")}function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"-05:00",n=e.getFullYear(),a=e.getMonth()+1,o=e.getDate();return n+"-"+(a<10?"0"+a:a)+"-"+(o<10?"0"+o:o)+"T00:00:00.000"+t}function f(e,t,n){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"-05:00";return new Date(e+"-"+(t<10?"0"+t:t)+"-"+(n<10?"0"+n:n)+"T00:00:00.000"+a)}function l(e,t){var n=new Date(e.getTime());return n.setDate(n.getDate()+t),n}function i(e,t){return e.getDate()===t.getDate()&&e.getMonth()===t.getMonth()}function y(e,t){var n=new Date(e.getTime());return n.setDate(e.getDate()+(7+t-e.getDay())%7),n}function p(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"-05:00",n=e%19,a=Math.floor(e/100),o=e%100,r=Math.floor(a/4),u=a%4,d=Math.floor((a+8)/25),l=(19*n+a-r-Math.floor((a-d+1)/3)+15)%30,i=(32+2*u+2*Math.floor(o/4)-l-o%4)%7,y=l+i-7*Math.floor((n+11*l+22*i)/451)+114;return f(e,Math.floor(y/31),1+y%31,t)}t.getHoliday=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new Date,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"-05:00";if(!function(e){return"[object Date]"===Object.prototype.toString.call(e)&&u(e.getFullYear())}(e))throw new Error("Invalid date.");for(var n=e.getFullYear(),a=0;a<r.default.length;a+=1){if(1===r.default[a].type&&i(e,f(n,r.default[a].month,r.default[a].day,t)))return r.default[a].name;if(2===r.default[a].type&&i(e,y(f(n,r.default[a].month,r.default[a].day,t),1)))return r.default[a].name;if(3===r.default[a].type&&i(e,l(p(n,t),r.default[a].offset)))return r.default[a].name}return""},t.getAllHolidays=function(){for(var e=u(arguments.length>0&&void 0!==arguments[0]?arguments[0]:(new Date).getFullYear()),t=[],n=0;n<r.default.length;n+=1){var a=void 0;1===r.default[n].type&&(a=f(e,r.default[n].month,r.default[n].day)),2===r.default[n].type&&(a=y(f(e,r.default[n].month,r.default[n].day),1)),3===r.default[n].type&&(a=l(p(e),r.default[n].offset)),t.push({date:d(a),type:r.default[n].type,name:r.default[n].name})}return t}}])}); | ||
//# sourceMappingURL=pascua.umd.min.js.map |
{ | ||
"name": "pascua", | ||
"version": "1.1.2", | ||
"version": "1.1.3", | ||
"description": "Calculadora para los festivos en Colombia", | ||
@@ -13,4 +13,3 @@ "main": "dist/index.js", | ||
"build:main": "babel --copy-files --out-dir dist --ignore __tests__ src", | ||
"build:umd.dev": "webpack --output-filename pascua.umd.js --mode development", | ||
"build:umd": "webpack --output-filename pascua.umd.min.js --mode production", | ||
"build:umd": "webpack --config webpack.config.umd.js", | ||
"prepublishOnly": "npm test && npm run build" | ||
@@ -51,3 +50,3 @@ }, | ||
"eslint-plugin-prettier": "^2.6.0", | ||
"husky": "^1.0.0-rc.4", | ||
"husky": "^1.0.0-rc.6", | ||
"jest": "^22.4.3", | ||
@@ -54,0 +53,0 @@ "npm-run-all": "^4.1.3", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
92080
11
710