added utils functions
This commit is contained in:
parent
200ff8d580
commit
79ad930ba3
74
src/utils/utils.ts
Normal file
74
src/utils/utils.ts
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
// format the date/time
|
||||
// if the date is today, show the time
|
||||
export const utilityFormatDate = (dateString: string): string => {
|
||||
const date = new Date(dateString);
|
||||
const today = new Date();
|
||||
|
||||
// save today date at midnight for comparison
|
||||
const todayMidnight = new Date(today.getFullYear(), today.getMonth(), today.getDate());
|
||||
|
||||
// check if the date is today
|
||||
if (
|
||||
date >= todayMidnight &&
|
||||
date < new Date(todayMidnight.getTime() + 86400000 /* milliseconds in a day sheeesh */)
|
||||
) {
|
||||
// show time if today
|
||||
return date.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" });
|
||||
} else {
|
||||
// "day month year" format
|
||||
return date.toLocaleDateString(undefined, { day: "numeric", month: "long", year: "numeric" });
|
||||
}
|
||||
};
|
||||
|
||||
// format the file sizes
|
||||
export const utilityFormatSize = (bytes: number): string => {
|
||||
if (bytes === 0) return "0 Bytes";
|
||||
|
||||
const k = 1024;
|
||||
const sizes = ["Bytes", "KB", "MB", "GB"];
|
||||
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
||||
|
||||
// tf is pow
|
||||
return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + " " + sizes[i];
|
||||
};
|
||||
|
||||
// UNformat the file sizes
|
||||
export const utilityUnformatSize = (formattedSize: string): number => {
|
||||
const sizes = ["Bytes", "KB", "MB", "GB"];
|
||||
const [value, unit] = formattedSize.split(" ");
|
||||
const index = sizes.indexOf(unit);
|
||||
return parseFloat(value) * Math.pow(1024, index);
|
||||
};
|
||||
|
||||
// extract filename and extension from a path
|
||||
// heeheeheehaw safe coding my boys 🤠
|
||||
// only consider things after the last period
|
||||
export const utilityExtractFilename = (filePath: string): { fileStem: string; fileExtension: string } | null => {
|
||||
const lastSlashIndex = filePath.lastIndexOf("/");
|
||||
const lastDotIndex = filePath.lastIndexOf(".");
|
||||
|
||||
// check if the last slash comes before the last dot
|
||||
if (lastDotIndex !== -1 && lastSlashIndex > lastDotIndex) {
|
||||
console.error("Invalid file path: the last slash comes before the last dot");
|
||||
throw new Error("Invalid file path: the last slash comes before the last dot");
|
||||
}
|
||||
|
||||
// check if the file path ends with a slash
|
||||
if (lastSlashIndex === filePath.length - 1) {
|
||||
console.error("Invalid file path: the file path ends with a slash");
|
||||
throw new Error("Invalid file path: the file path ends with a slash");
|
||||
}
|
||||
|
||||
let fileStem: string, fileExtension: string;
|
||||
|
||||
if (lastDotIndex === -1 || lastDotIndex < lastSlashIndex) {
|
||||
// if there's no dot after the last slash, the whole name is the fileStem
|
||||
fileStem = filePath.substring(lastSlashIndex + 1);
|
||||
fileExtension = "";
|
||||
} else {
|
||||
fileStem = filePath.substring(lastSlashIndex + 1, lastDotIndex);
|
||||
fileExtension = filePath.substring(lastDotIndex + 1).toLowerCase();
|
||||
}
|
||||
|
||||
return { fileStem: fileStem, fileExtension: fileExtension };
|
||||
};
|
||||
Loading…
Reference in a new issue