|
"use strict"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
exports.minDeadline = minDeadline; |
|
exports.getDeadlineTimeoutString = getDeadlineTimeoutString; |
|
exports.getRelativeTimeout = getRelativeTimeout; |
|
exports.deadlineToString = deadlineToString; |
|
exports.formatDateDifference = formatDateDifference; |
|
function minDeadline(...deadlineList) { |
|
let minValue = Infinity; |
|
for (const deadline of deadlineList) { |
|
const deadlineMsecs = deadline instanceof Date ? deadline.getTime() : deadline; |
|
if (deadlineMsecs < minValue) { |
|
minValue = deadlineMsecs; |
|
} |
|
} |
|
return minValue; |
|
} |
|
const units = [ |
|
['m', 1], |
|
['S', 1000], |
|
['M', 60 * 1000], |
|
['H', 60 * 60 * 1000], |
|
]; |
|
function getDeadlineTimeoutString(deadline) { |
|
const now = new Date().getTime(); |
|
if (deadline instanceof Date) { |
|
deadline = deadline.getTime(); |
|
} |
|
const timeoutMs = Math.max(deadline - now, 0); |
|
for (const [unit, factor] of units) { |
|
const amount = timeoutMs / factor; |
|
if (amount < 1e8) { |
|
return String(Math.ceil(amount)) + unit; |
|
} |
|
} |
|
throw new Error('Deadline is too far in the future'); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
const MAX_TIMEOUT_TIME = 2147483647; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function getRelativeTimeout(deadline) { |
|
const deadlineMs = deadline instanceof Date ? deadline.getTime() : deadline; |
|
const now = new Date().getTime(); |
|
const timeout = deadlineMs - now; |
|
if (timeout < 0) { |
|
return 0; |
|
} |
|
else if (timeout > MAX_TIMEOUT_TIME) { |
|
return Infinity; |
|
} |
|
else { |
|
return timeout; |
|
} |
|
} |
|
function deadlineToString(deadline) { |
|
if (deadline instanceof Date) { |
|
return deadline.toISOString(); |
|
} |
|
else { |
|
const dateDeadline = new Date(deadline); |
|
if (Number.isNaN(dateDeadline.getTime())) { |
|
return '' + deadline; |
|
} |
|
else { |
|
return dateDeadline.toISOString(); |
|
} |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function formatDateDifference(startDate, endDate) { |
|
return ((endDate.getTime() - startDate.getTime()) / 1000).toFixed(3) + 's'; |
|
} |
|
|