forked from aboutdavid/inbound
-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.js
76 lines (70 loc) · 2.44 KB
/
utils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
require("dotenv").config()
const reachedDateLimit = (date) => (date - Date.now()) > 2 * 24 * 60 * 60 * 1000 || (Date.now() - date) > 8 * 24 * 60 * 60 * 1000;
async function checkFlight(code, date) {
if (reachedDateLimit(date)) return { error: true }
const res = await fetch(`https://aeroapi.flightaware.com/aeroapi/flights/${code}?` + new URLSearchParams({
start: new Date(date).toISOString(),
max_pages: 1
}), {
headers: {
"x-apikey": process.env.FLIGHT_API_TOKEN
}
})
if (res.status != 200) return {
error: true
}
const json = await res.json()
if (json.flights?.length == 0) return {
error: true
}
return json.flights.reverse()[0]
}
function progress(int) {
int = Math.round(int / 10)
var bar = "[";
var filled = "=".repeat(int);
var empty = "–".repeat(10 - int);
bar += filled + empty + "]";
return bar;
}
function fmtDate(date, tz) {
return new Date(date).toLocaleString('en-US', { timeZone: tz, timeStyle: "short", dateStyle: "long" })
}
function humanReadableDiff(date1, date2) {
date1 = new Date(date1)
date2 = new Date(date2)
var seconds = Math.floor((date2 - date1) / 1000);
var prefix = seconds < 0 ? " early" : " late";
seconds = Math.abs(seconds);
var interval = Math.floor(seconds / 31536000);
var timeStr = "";
if (interval >= 1) {
timeStr += interval + " year" + (interval > 1 ? "s" : "");
seconds %= 31536000;
}
interval = Math.floor(seconds / 2592000);
if (interval >= 1) {
timeStr += (timeStr ? ", " : "") + interval + " month" + (interval > 1 ? "s" : "");
seconds %= 2592000;
}
interval = Math.floor(seconds / 86400);
if (interval >= 1) {
timeStr += (timeStr ? ", " : "") + interval + " day" + (interval > 1 ? "s" : "");
seconds %= 86400;
}
interval = Math.floor(seconds / 3600);
if (interval >= 1) {
timeStr += (timeStr ? ", " : "") + interval + " hour" + (interval > 1 ? "s" : "");
seconds %= 3600;
}
interval = Math.floor(seconds / 60);
if (interval >= 1) {
timeStr += (timeStr ? ", " : "") + interval + " minute" + (interval > 1 ? "s" : "");
seconds %= 60;
}
if (seconds > 0) {
timeStr += (timeStr ? ", " : "") + seconds + " second" + (seconds > 1 ? "s" : "");
}
return timeStr + prefix;
}
module.exports = { checkFlight, progress, fmtDate, humanReadableDiff }