UNPKG

@drewsonne/maya-dates

Version:

Typescript package to manipulate dates in the Maya Calendar

126 lines 5.61 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var moonbeams = __importStar(require("moonbeams")); var gregorian_1 = __importDefault(require("../lc/western/gregorian")); var GregorianFactory = (function () { function GregorianFactory() { } GregorianFactory.prototype.parse = function (gregorian) { var cleanedGregorian = gregorian.replace(/\*/g, '').trim(); var isBCE = false; var searchString = ''; if (cleanedGregorian.includes('BCE')) { isBCE = true; searchString = 'BCE'; } else if (cleanedGregorian.includes('CE')) { isBCE = false; searchString = 'CE'; } if (searchString) { cleanedGregorian = cleanedGregorian.replace(" ".concat(searchString), '').replace(searchString, '').trim(); } var rawParts = cleanedGregorian.split('/'); if (rawParts.length !== 3) { throw new Error("Invalid Gregorian date format: \"".concat(gregorian, "\". Expected format: DD/MM/YYYY")); } var dateParts = rawParts.map(function (part, index) { var trimmed = part.trim(); if (trimmed.length === 0) { throw new Error("Invalid Gregorian date component in \"".concat(gregorian, "\": empty component at position ").concat(index + 1)); } var value = Number(trimmed); if (!Number.isFinite(value) || isNaN(value)) { throw new Error("Non-numeric Gregorian date component \"".concat(trimmed, "\" in \"").concat(gregorian, "\"")); } return value; }); var day = dateParts[0]; var month = dateParts[1]; var year = dateParts[2]; if (month < 1 || month > 12) { throw new Error("Month out of range in Gregorian date \"".concat(gregorian, "\": ").concat(month, ". Expected 1-12")); } if (day < 1 || day > 31) { throw new Error("Day out of range in Gregorian date \"".concat(gregorian, "\": ").concat(day, ". Expected 1-31")); } if (year === 0) { throw new Error("Year zero is not valid in Gregorian date \"".concat(gregorian, "\"")); } var adjustedYear = isBCE ? (1 - year) : year; var targetJd = Math.ceil(moonbeams.calendarToJd(adjustedYear, month, day)); var storedJd = targetJd; var iterations = 0; var maxIterations = 10; while (iterations < maxIterations) { var offset = storedJd === 2299160 ? 0 : storedJd <= 1448283 ? -8 : storedJd <= 1455864 ? -8 : storedJd <= 1599864 ? -5 : storedJd <= 1743864 ? -2 : storedJd <= 1887864 ? 1 : storedJd <= 2031864 ? 4 : storedJd <= 2096664 ? 6 : storedJd <= 2175864 ? 7 : storedJd <= 2240664 ? 9 : storedJd <= 2299160 ? 10 : 0; if (storedJd + offset === targetJd) { break; } storedJd = targetJd - offset; iterations++; } var temp = new gregorian_1.default(storedJd); var calculatedDate = temp.date; var calculatedDay = Math.floor(calculatedDate.day); var calculatedMonth = calculatedDate.month; var calculatedYear = calculatedDate.year; var targetYear = year; var calcYearForBCE = calculatedYear < 0 ? Math.abs(calculatedYear - 1) : calculatedYear; if (calculatedDay !== day || calculatedMonth !== month || (isBCE ? calcYearForBCE !== targetYear : calculatedYear !== targetYear)) { storedJd = targetJd; } return new gregorian_1.default(storedJd); }; return GregorianFactory; }()); exports.default = GregorianFactory; //# sourceMappingURL=gregorian.js.map