1export function formatDuration(seconds: number) {
2 const minutes = Math.floor(seconds / 60);
3 const remainingSeconds = seconds % 60;
4 return `${minutes}:${remainingSeconds.toString().padStart(2, "0")}`;
5}
6
7export function formatDurationLong(seconds: number) {
8 const hours = Math.floor(seconds / 3600);
9 const minutes = Math.floor((seconds % 3600) / 60);
10 const remainingSeconds = seconds % 60;
11 return `${hours}:${minutes.toString().padStart(2, "0")}:${remainingSeconds.toString().padStart(2, "0")}`;
12}
13
14export function escapeUri(uri: string) {
15 return encodeURIComponent(uri)
16 .replace(/%2F/gi, "/")
17 .replace(/%3A/gi, ":")
18 .replace(/%2B/gi, "+")
19 .replace(/%40/gi, "@")
20 .replace(/%2D/gi, "-")
21 .replace(/%5F/gi, "_")
22 .replace(/%2E/gi, ".")
23 .replace(/%2C/gi, ",");
24}
25
26const unknownDate = new Date("1970-01-03");
27const unknownDateWithKnownYear = new Date("1970-02-20");
28/** in pacific time, so a page shows the same days on any machine that renders it */
29const day = new Intl.DateTimeFormat("en-US", {
30 timeZone: "America/Los_Angeles",
31 month: "2-digit",
32 day: "2-digit",
33 year: "2-digit",
34});
35
36export function formatDate(dateTime: Date) {
37 return dateTime < unknownDateWithKnownYear
38 ? dateTime < unknownDate
39 ? "??.??.??"
40 : `xx.xx.${21 + Math.floor(dateTime.getTime() / 86400000)}`
41 : day.format(dateTime).replaceAll("/", ".");
42}