2022-08-26 16:08:58 +02:00
|
|
|
import type { Locale } from "date-fns";
|
|
|
|
import { format } from "date-fns";
|
|
|
|
|
2019-10-11 18:41:29 +02:00
|
|
|
function localeMonthNames(): string[] {
|
|
|
|
const monthNames: string[] = [];
|
|
|
|
for (let i = 0; i < 12; i += 1) {
|
|
|
|
const d = new Date(2019, i, 1);
|
2020-02-18 08:57:00 +01:00
|
|
|
const month = d.toLocaleString("default", { month: "long" });
|
2019-10-11 18:41:29 +02:00
|
|
|
monthNames.push(month);
|
|
|
|
}
|
|
|
|
return monthNames;
|
|
|
|
}
|
|
|
|
|
|
|
|
function localeShortWeekDayNames(): string[] {
|
|
|
|
const weekDayNames: string[] = [];
|
|
|
|
for (let i = 13; i < 20; i += 1) {
|
|
|
|
const d = new Date(2019, 9, i);
|
2020-02-18 08:57:00 +01:00
|
|
|
const weekDay = d.toLocaleString("default", { weekday: "short" });
|
2019-10-11 18:41:29 +02:00
|
|
|
weekDayNames.push(weekDay);
|
|
|
|
}
|
|
|
|
return weekDayNames;
|
|
|
|
}
|
|
|
|
|
2020-11-23 16:58:50 +01:00
|
|
|
// https://stackoverflow.com/a/18650828/10204399
|
2022-01-13 15:04:43 +01:00
|
|
|
function formatBytes(bytes: number, decimals = 2, zero = "0 Bytes"): string {
|
|
|
|
if (bytes === 0) return zero;
|
2020-11-23 16:58:50 +01:00
|
|
|
|
|
|
|
const k = 1024;
|
|
|
|
const dm = decimals < 0 ? 0 : decimals;
|
|
|
|
const sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
|
|
|
|
|
|
|
|
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
|
|
|
|
|
|
return `${parseFloat((bytes / k ** i).toFixed(dm))} ${sizes[i]}`;
|
|
|
|
}
|
|
|
|
|
2022-08-26 16:08:58 +02:00
|
|
|
function roundToNearestMinute(date = new Date()) {
|
|
|
|
const minutes = 1;
|
|
|
|
const ms = 1000 * 60 * minutes;
|
|
|
|
|
|
|
|
// 👇️ replace Math.round with Math.ceil to always round UP
|
|
|
|
return new Date(Math.round(date.getTime() / ms) * ms);
|
|
|
|
}
|
|
|
|
|
|
|
|
function formatDateTimeForEvent(dateTime: Date, locale: Locale): string {
|
|
|
|
return format(dateTime, "PPp", { locale });
|
|
|
|
}
|
|
|
|
|
|
|
|
export {
|
|
|
|
localeMonthNames,
|
|
|
|
localeShortWeekDayNames,
|
|
|
|
formatBytes,
|
|
|
|
roundToNearestMinute,
|
|
|
|
formatDateTimeForEvent,
|
|
|
|
};
|