UNPKG

hyperformula-dc

Version:

HyperFormula is a JavaScript engine for efficient processing of spreadsheet-like data and formulas

234 lines (175 loc) 6.06 kB
"use strict"; exports.__esModule = true; exports.defaultParseToDateTime = defaultParseToDateTime; exports.secondsExtendedRegexp = void 0; require("core-js/modules/es.string.trim.js"); require("core-js/modules/es.regexp.exec.js"); require("core-js/modules/es.string.replace.js"); require("core-js/modules/es.string.split.js"); require("core-js/modules/es.array.includes.js"); require("core-js/modules/es.string.includes.js"); require("core-js/modules/es.array.slice.js"); require("core-js/modules/es.object.assign.js"); require("core-js/modules/es.string.ends-with.js"); require("core-js/modules/es.number.constructor.js"); /** * @license * Copyright (c) 2021 Handsoncode. All rights reserved. */ function defaultParseToDateTime(dateTimeString, dateFormat, timeFormat) { dateTimeString = dateTimeString.replace(/\s\s+/g, ' ').trim().toLowerCase(); var ampmtoken = dateTimeString.substring(dateTimeString.length - 2); if (ampmtoken === 'am' || ampmtoken === 'pm') { dateTimeString = dateTimeString.substring(0, dateTimeString.length - 2).trim(); } else { ampmtoken = dateTimeString.substring(dateTimeString.length - 1); if (ampmtoken === 'a' || ampmtoken === 'p') { dateTimeString = dateTimeString.substring(0, dateTimeString.length - 1).trim(); } else { ampmtoken = undefined; } } var dateItems = dateTimeString.split(/[ /.-]/g); if (dateItems.length >= 2 && dateItems[dateItems.length - 2].includes(':')) { dateItems[dateItems.length - 2] = dateItems[dateItems.length - 2] + '.' + dateItems[dateItems.length - 1]; dateItems.pop(); } var timeItems = dateItems[dateItems.length - 1].split(':'); if (ampmtoken !== undefined) { timeItems.push(ampmtoken); } if (dateItems.length === 1) { return defaultParseToTime(timeItems, timeFormat); } if (timeItems.length === 1) { return defaultParseToDate(dateItems, dateFormat); } var parsedDate = defaultParseToDate(dateItems.slice(0, dateItems.length - 1), dateFormat); var parsedTime = defaultParseToTime(timeItems, timeFormat); if (parsedDate === undefined) { return undefined; } else if (parsedTime === undefined) { return undefined; } else { return Object.assign(Object.assign({}, parsedDate), parsedTime); } } var secondsExtendedRegexp = /^ss\.(s+|0+)$/; exports.secondsExtendedRegexp = secondsExtendedRegexp; function defaultParseToTime(timeItems, timeFormat) { if (timeFormat === undefined) { return undefined; } timeFormat = timeFormat.toLowerCase(); if (timeFormat.endsWith('am/pm')) { timeFormat = timeFormat.substring(0, timeFormat.length - 5).trim(); } else if (timeFormat.endsWith('a/p')) { timeFormat = timeFormat.substring(0, timeFormat.length - 3).trim(); } var formatItems = timeFormat.split(':'); var ampm = undefined; if (timeItems[timeItems.length - 1] === 'am' || timeItems[timeItems.length - 1] === 'a') { ampm = false; timeItems.pop(); } else if (timeItems[timeItems.length - 1] === 'pm' || timeItems[timeItems.length - 1] === 'p') { ampm = true; timeItems.pop(); } var fractionOfSecondPrecision = 0; if (formatItems.length >= 1 && secondsExtendedRegexp.test(formatItems[formatItems.length - 1])) { fractionOfSecondPrecision = formatItems[formatItems.length - 1].length - 3; formatItems[formatItems.length - 1] = 'ss'; } if (timeItems.length !== formatItems.length) { return undefined; } var hourIndex = formatItems.indexOf('hh'); var minuteIndex = formatItems.indexOf('mm'); var secondIndex = formatItems.indexOf('ss'); var hourString = hourIndex !== -1 ? timeItems[hourIndex] : '0'; if (!/^\d+$/.test(hourString)) { return undefined; } var hours = Number(hourString); if (ampm !== undefined) { if (hours < 0 || hours > 12) { return undefined; } hours = hours % 12; if (ampm) { hours = hours + 12; } } var minuteString = minuteIndex !== -1 ? timeItems[minuteIndex] : '0'; if (!/^\d+$/.test(minuteString)) { return undefined; } var minutes = Number(minuteString); var secondString = secondIndex !== -1 ? timeItems[secondIndex] : '0'; if (!/^\d+(\.\d+)?$/.test(secondString)) { return undefined; } var seconds = Number(secondString); seconds = Math.round(seconds * Math.pow(10, fractionOfSecondPrecision)) / Math.pow(10, fractionOfSecondPrecision); return { hours: hours, minutes: minutes, seconds: seconds }; } function defaultParseToDate(dateItems, dateFormat) { if (dateFormat === undefined) { return undefined; } var formatItems = dateFormat.toLowerCase().split(/[ /.-]/g); if (dateItems.length !== formatItems.length) { return undefined; } var monthIndex = formatItems.indexOf('mm'); var dayIndex = formatItems.indexOf('dd'); var yearIndexLong = formatItems.indexOf('yyyy'); var yearIndexShort = formatItems.indexOf('yy'); if (!(monthIndex in dateItems) || !(dayIndex in dateItems) || !(yearIndexLong in dateItems) && !(yearIndexShort in dateItems)) { return undefined; } if (yearIndexLong in dateItems && yearIndexShort in dateItems) { return undefined; } var year; if (yearIndexLong in dateItems) { var yearString = dateItems[yearIndexLong]; if (/^\d+$/.test(yearString)) { year = Number(yearString); if (year < 1000 || year > 9999) { return undefined; } } else { return undefined; } } else { var _yearString = dateItems[yearIndexShort]; if (/^\d+$/.test(_yearString)) { year = Number(_yearString); if (year < 0 || year > 99) { return undefined; } } else { return undefined; } } var monthString = dateItems[monthIndex]; if (!/^\d+$/.test(monthString)) { return undefined; } var month = Number(monthString); var dayString = dateItems[dayIndex]; if (!/^\d+$/.test(dayString)) { return undefined; } var day = Number(dayString); return { year: year, month: month, day: day }; }