UNPKG

@focuson/utils

Version:

Common utilities for the @focuson project

117 lines (116 loc) 5.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.setLength = exports.setEndDate = exports.setStartDate = exports.calculateLength = exports.addDate = exports.timeOnServerinGMT = exports.millisecondsBetweenServerAndBrowser = exports.getHoursAndMinutes = exports.after = exports.isBefore = exports.isSameDay = void 0; function isSameDay(d1, d2) { return d1.getFullYear() === d2.getFullYear() && d1.getMonth() === d2.getMonth() && d1.getDate() === d2.getDate(); } exports.isSameDay = isSameDay; function isBefore(d, hours, mins) { const hour = d.getHours(); const minutes = d.getMinutes(); if (hour < hours) return true; if (hour === hours) return minutes <= mins; return false; } exports.isBefore = isBefore; function after(browserNow, time, dateInfo) { const matches = time.match(/^([0-9]|0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$/); if (!matches) throw Error(`Time [${time}] is not of format hh:mm`); const tHours = Number.parseInt(matches[1]); const tMins = Number.parseInt(matches[2]); const serverTime = timeOnServerinGMT(browserNow, dateInfo); const [sHours, sMins] = getHoursAndMinutes(serverTime); const serversHoursOffsetFromGMT = dateInfo.dates.serversHoursOffsetFromGMT; const serverHoursInItsTimezone = sHours + (serversHoursOffsetFromGMT ? serversHoursOffsetFromGMT : 0); if (serverHoursInItsTimezone > tHours) return true; if (serverHoursInItsTimezone < tHours) return false; return sMins >= tMins; } exports.after = after; function getHoursAndMinutes(utcString) { const matches = utcString.match(/ ([0-9]|0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):/); if (!matches) throw Error(`Hours and minutes must be hh:mm and where ${utcString}`); const hours = Number.parseInt(matches[1]); const mins = Number.parseInt(matches[2]); return [hours, mins]; } exports.getHoursAndMinutes = getHoursAndMinutes; function millisecondsBetweenServerAndBrowser(d) { const serverTime = Date.parse(d.dates.serverNow); const browserTime = Date.parse(d.now); return browserTime - serverTime; } exports.millisecondsBetweenServerAndBrowser = millisecondsBetweenServerAndBrowser; function timeOnServerinGMT(browserTime, dateInfo) { const date = new Date(Date.parse(browserTime) - millisecondsBetweenServerAndBrowser(dateInfo)); return date.toUTCString(); } exports.timeOnServerinGMT = timeOnServerinGMT; function addDate(debug, thisDate, length, subtract) { // if ( !thisDate || !thisDate.match ( /^(1[0-2]|0[1-9]|\d)-(20\d{2}|19\d{2}|0(?!0)\d|[1-9]\d)$/ ) ) // return thisDate if (thisDate === undefined) return thisDate; const parts = thisDate.split(/[-|\/]/); if (parts.length !== 2) return thisDate; const [month, year] = parts; const offset = length ? length : 0; const withSign = subtract ? -offset : offset; const date = new Date(Number.parseInt(year), Number.parseInt(month) - 1); if (debug) console.log('addDate', 'month', month, 'year', year, 'date initial', date); date.setMonth(date.getMonth() + withSign); if (debug) console.log('addDate', 'month', month, 'year', year, 'offset', offset, 'withSign', withSign, 'result', date); return (date.getMonth() + 1) + "/" + date.getFullYear(); } exports.addDate = addDate; function calculateLength(startDate, endDate, offset) { function dateToMonths(d) { const matcher = d.match(/^([0-9]*)[-/]([0-9]*)$/); if (!matcher) return undefined; return Number.parseInt(matcher[1]) + Number.parseInt(matcher[2]) * 12; } const end = dateToMonths(endDate); const start = dateToMonths(startDate); if (end && start) return (end - start + offset).toString(); return undefined; } exports.calculateLength = calculateLength; function setStartDate(sedl, startDate, debug) { if (sedl.length !== undefined) return Object.assign(Object.assign({}, sedl), { startDate, endDate: addDate(debug, startDate, Number.parseInt(sedl.length) - 1, false) }); if (sedl.endDate !== undefined) return Object.assign(Object.assign({}, sedl), { startDate, length: calculateLength(startDate, sedl.endDate, -1) }); return Object.assign(Object.assign({}, sedl), { startDate }); } exports.setStartDate = setStartDate; function setEndDate(sedl, endDate, debug) { if (sedl.length !== undefined && sedl.startDate !== undefined) return Object.assign(Object.assign({}, sedl), { endDate, length: calculateLength(sedl.startDate, endDate, 1) }); if (sedl.length !== undefined) return Object.assign(Object.assign({}, sedl), { endDate, startDate: addDate(debug, endDate, Number.parseInt(sedl.length) - 1, true) }); if (sedl.startDate !== undefined) return Object.assign(Object.assign({}, sedl), { endDate, length: calculateLength(sedl.startDate, endDate, 1) }); return Object.assign(Object.assign({}, sedl), { endDate }); } exports.setEndDate = setEndDate; function setLength(sedl, length, debug) { if (!length || length === '0') return { startDate: sedl.startDate }; if (sedl.startDate !== undefined) return Object.assign(Object.assign({}, sedl), { length, endDate: addDate(debug, sedl.startDate, Number.parseInt(length) - 1, false) }); if (sedl.endDate !== undefined) return Object.assign(Object.assign({}, sedl), { length, startDate: addDate(debug, sedl.endDate, Number.parseInt(length) - 1, true) }); return Object.assign(Object.assign({}, sedl), { length }); } exports.setLength = setLength;