| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| export type Deadline = Date | number; |
|
|
| export function minDeadline(...deadlineList: Deadline[]): Deadline { |
| 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: Array<[string, number]> = [ |
| ['m', 1], |
| ['S', 1000], |
| ['M', 60 * 1000], |
| ['H', 60 * 60 * 1000], |
| ]; |
|
|
| export function getDeadlineTimeoutString(deadline: 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; |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| export function getRelativeTimeout(deadline: 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; |
| } |
| } |
|
|
| export function deadlineToString(deadline: Deadline): string { |
| if (deadline instanceof Date) { |
| return deadline.toISOString(); |
| } else { |
| const dateDeadline = new Date(deadline); |
| if (Number.isNaN(dateDeadline.getTime())) { |
| return '' + deadline; |
| } else { |
| return dateDeadline.toISOString(); |
| } |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| export function formatDateDifference(startDate: Date, endDate: Date): string { |
| return ((endDate.getTime() - startDate.getTime()) / 1000).toFixed(3) + 's'; |
| } |
|
|