@focuson/utils
Version:
Common utilities for the @focuson project
117 lines (116 loc) • 5.62 kB
JavaScript
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;
;