UNPKG

chrono-node

Version:

A natural language date parser in Javascript

281 lines 6.8 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.toTimezoneOffset = exports.getLastWeekdayOfMonth = exports.getNthWeekdayOfMonth = exports.TIMEZONE_ABBR_MAP = void 0; const dayjs_1 = __importDefault(require("dayjs")); const types_1 = require("./types"); exports.TIMEZONE_ABBR_MAP = { ACDT: 630, ACST: 570, ADT: -180, AEDT: 660, AEST: 600, AFT: 270, AKDT: -480, AKST: -540, ALMT: 360, AMST: -180, AMT: -240, ANAST: 720, ANAT: 720, AQTT: 300, ART: -180, AST: -240, AWDT: 540, AWST: 480, AZOST: 0, AZOT: -60, AZST: 300, AZT: 240, BNT: 480, BOT: -240, BRST: -120, BRT: -180, BST: 60, BTT: 360, CAST: 480, CAT: 120, CCT: 390, CDT: -300, CEST: 120, CET: { timezoneOffsetDuringDst: 2 * 60, timezoneOffsetNonDst: 60, dstStart: (year) => getLastWeekdayOfMonth(year, types_1.Month.MARCH, types_1.Weekday.SUNDAY, 2), dstEnd: (year) => getLastWeekdayOfMonth(year, types_1.Month.OCTOBER, types_1.Weekday.SUNDAY, 3), }, CHADT: 825, CHAST: 765, CKT: -600, CLST: -180, CLT: -240, COT: -300, CST: -360, CT: { timezoneOffsetDuringDst: -5 * 60, timezoneOffsetNonDst: -6 * 60, dstStart: (year) => getNthWeekdayOfMonth(year, types_1.Month.MARCH, types_1.Weekday.SUNDAY, 2, 2), dstEnd: (year) => getNthWeekdayOfMonth(year, types_1.Month.NOVEMBER, types_1.Weekday.SUNDAY, 1, 2), }, CVT: -60, CXT: 420, ChST: 600, DAVT: 420, EASST: -300, EAST: -360, EAT: 180, ECT: -300, EDT: -240, EEST: 180, EET: 120, EGST: 0, EGT: -60, EST: -300, ET: { timezoneOffsetDuringDst: -4 * 60, timezoneOffsetNonDst: -5 * 60, dstStart: (year) => getNthWeekdayOfMonth(year, types_1.Month.MARCH, types_1.Weekday.SUNDAY, 2, 2), dstEnd: (year) => getNthWeekdayOfMonth(year, types_1.Month.NOVEMBER, types_1.Weekday.SUNDAY, 1, 2), }, FJST: 780, FJT: 720, FKST: -180, FKT: -240, FNT: -120, GALT: -360, GAMT: -540, GET: 240, GFT: -180, GILT: 720, GMT: 0, GST: 240, GYT: -240, HAA: -180, HAC: -300, HADT: -540, HAE: -240, HAP: -420, HAR: -360, HAST: -600, HAT: -90, HAY: -480, HKT: 480, HLV: -210, HNA: -240, HNC: -360, HNE: -300, HNP: -480, HNR: -420, HNT: -150, HNY: -540, HOVT: 420, ICT: 420, IDT: 180, IOT: 360, IRDT: 270, IRKST: 540, IRKT: 540, IRST: 210, IST: 330, JST: 540, KGT: 360, KRAST: 480, KRAT: 480, KST: 540, KUYT: 240, LHDT: 660, LHST: 630, LINT: 840, MAGST: 720, MAGT: 720, MART: -510, MAWT: 300, MDT: -360, MESZ: 120, MEZ: 60, MHT: 720, MMT: 390, MSD: 240, MSK: 180, MST: -420, MT: { timezoneOffsetDuringDst: -6 * 60, timezoneOffsetNonDst: -7 * 60, dstStart: (year) => getNthWeekdayOfMonth(year, types_1.Month.MARCH, types_1.Weekday.SUNDAY, 2, 2), dstEnd: (year) => getNthWeekdayOfMonth(year, types_1.Month.NOVEMBER, types_1.Weekday.SUNDAY, 1, 2), }, MUT: 240, MVT: 300, MYT: 480, NCT: 660, NDT: -90, NFT: 690, NOVST: 420, NOVT: 360, NPT: 345, NST: -150, NUT: -660, NZDT: 780, NZST: 720, OMSST: 420, OMST: 420, PDT: -420, PET: -300, PETST: 720, PETT: 720, PGT: 600, PHOT: 780, PHT: 480, PKT: 300, PMDT: -120, PMST: -180, PONT: 660, PST: -480, PT: { timezoneOffsetDuringDst: -7 * 60, timezoneOffsetNonDst: -8 * 60, dstStart: (year) => getNthWeekdayOfMonth(year, types_1.Month.MARCH, types_1.Weekday.SUNDAY, 2, 2), dstEnd: (year) => getNthWeekdayOfMonth(year, types_1.Month.NOVEMBER, types_1.Weekday.SUNDAY, 1, 2), }, PWT: 540, PYST: -180, PYT: -240, RET: 240, SAMT: 240, SAST: 120, SBT: 660, SCT: 240, SGT: 480, SRT: -180, SST: -660, TAHT: -600, TFT: 300, TJT: 300, TKT: 780, TLT: 540, TMT: 300, TVT: 720, ULAT: 480, UTC: 0, UYST: -120, UYT: -180, UZT: 300, VET: -210, VLAST: 660, VLAT: 660, VUT: 660, WAST: 120, WAT: 60, WEST: 60, WESZ: 60, WET: 0, WEZ: 0, WFT: 720, WGST: -120, WGT: -180, WIB: 420, WIT: 540, WITA: 480, WST: 780, WT: 0, YAKST: 600, YAKT: 600, YAPT: 600, YEKST: 360, YEKT: 360, }; function getNthWeekdayOfMonth(year, month, weekday, n, hour = 0) { let dayOfMonth = 0; let i = 0; while (i < n) { dayOfMonth++; const date = new Date(year, month - 1, dayOfMonth); if (date.getDay() === weekday) i++; } return new Date(year, month - 1, dayOfMonth, hour); } exports.getNthWeekdayOfMonth = getNthWeekdayOfMonth; function getLastWeekdayOfMonth(year, month, weekday, hour = 0) { const oneIndexedWeekday = weekday === 0 ? 7 : weekday; const date = new Date(year, month - 1 + 1, 1, 12); const firstWeekdayNextMonth = date.getDay() === 0 ? 7 : date.getDay(); let dayDiff; if (firstWeekdayNextMonth === oneIndexedWeekday) dayDiff = 7; else if (firstWeekdayNextMonth < oneIndexedWeekday) dayDiff = 7 + firstWeekdayNextMonth - oneIndexedWeekday; else dayDiff = firstWeekdayNextMonth - oneIndexedWeekday; date.setDate(date.getDate() - dayDiff); return new Date(year, month - 1, date.getDate(), hour); } exports.getLastWeekdayOfMonth = getLastWeekdayOfMonth; function toTimezoneOffset(timezoneInput, date, timezoneOverrides = {}) { var _a; if (timezoneInput == null) { return null; } if (typeof timezoneInput === "number") { return timezoneInput; } const matchedTimezone = (_a = timezoneOverrides[timezoneInput]) !== null && _a !== void 0 ? _a : exports.TIMEZONE_ABBR_MAP[timezoneInput]; if (matchedTimezone == null) { return null; } if (typeof matchedTimezone == "number") { return matchedTimezone; } if (date == null) { return null; } if (dayjs_1.default(date).isAfter(matchedTimezone.dstStart(date.getFullYear())) && !dayjs_1.default(date).isAfter(matchedTimezone.dstEnd(date.getFullYear()))) { return matchedTimezone.timezoneOffsetDuringDst; } return matchedTimezone.timezoneOffsetNonDst; } exports.toTimezoneOffset = toTimezoneOffset; //# sourceMappingURL=timezone.js.map