UNPKG

section-2

Version:

A library for calculating unsocial hours entitlements under the NHS agenda for change's section 2

38 lines (37 loc) 2.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validateTimestampParameters = exports.validateTimestamp = void 0; const validTimestamp = /^(01|[2-9]\d)\d\d-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01]) [0-2]\d(:[0-5]\d){1,2}$/; // /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01]) [0-2]\d(:[0-5]\d){1,2}$/; full range, above is from 0100-01-01 00:00:00.000 to 9999-12-31 23:59:59.999 to prevent JS date object errors const validIso = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)((-(\d{2}):(\d{2})|Z)?)$/; const validateTimestamp = (timestamp) => { if (timestamp instanceof Date) { return !isNaN(timestamp.getTime()); } if (typeof timestamp === "string") { return validTimestamp.test(timestamp) || validIso.test(timestamp); } return (Number.isSafeInteger(timestamp) && Number(timestamp) <= 8640000000000000 && Number(timestamp) >= -8640000000000000); }; exports.validateTimestamp = validateTimestamp; const validateTimestampParameters = (from, planned_to, actual_to) => { if (!(0, exports.validateTimestamp)(from) || !(0, exports.validateTimestamp)(planned_to) || (!!actual_to && !(0, exports.validateTimestamp)(actual_to))) { console.warn("Invalid datetime passed - function will return 0 for all fields. Datetimes must be a Date object, unix time or a string in yyyy-mm-dd or ISO format."); return false; } const fromObj = new Date(from); const plannedToObj = new Date(planned_to); const actualToObj = actual_to ? new Date(actual_to) : null; if (!((!actualToObj || actualToObj >= plannedToObj) && plannedToObj >= fromObj)) { console.warn("Invalid datetime passed - function will return 0 for all fields. Datetimes must be in ascending order (from <= planned_to <= actual_to || !actual_to)"); //times are out of sequence - return 0 for everything return false; } return true; }; exports.validateTimestampParameters = validateTimestampParameters;