allows controlling duration on the frontend

This commit is contained in:
2025-01-13 20:36:46 -08:00
parent fdd3f2c128
commit 39ddf45f0d
6 changed files with 115 additions and 60 deletions

View File

@@ -1,5 +1,9 @@
// This function is slow
export function getDateString(date: Date, utc: boolean, millis: boolean) {
export function getDateString(
date: Date,
utc: boolean,
millis: boolean,
): string {
const year = utc ? date.getUTCFullYear() : date.getFullYear();
const month = (
(utc ? date.getMonth() : date.getMonth()) + 1
@@ -47,3 +51,47 @@ export function getDateString(date: Date, utc: boolean, millis: boolean) {
});
return `${year}/${month}/${day} ${hour}:${minute}:${second}${millis ? `.${milliseconds}` : ''}${utc ? 'Z' : ''}`;
}
export function getDurationString(duration_millis: number): string {
const millis = duration_millis % 1000;
const duration_secs = Math.floor(duration_millis / 1000);
const seconds = duration_secs % 60;
const duration_minutes = Math.floor(duration_secs / 60);
const minutes = duration_minutes % 60;
const duration_hours = Math.floor(duration_minutes / 60);
const millis_str = millis.toLocaleString('en-US', {
minimumIntegerDigits: 3,
useGrouping: false,
maximumFractionDigits: 0,
});
const seconds_str = seconds.toLocaleString('en-US', {
minimumIntegerDigits: 2,
useGrouping: false,
maximumFractionDigits: 0,
});
const minutes_str = minutes.toLocaleString('en-US', {
minimumIntegerDigits: 2,
useGrouping: false,
maximumFractionDigits: 0,
});
const hours_str = duration_hours.toLocaleString('en-US', {
minimumIntegerDigits: 1,
useGrouping: false,
maximumFractionDigits: 0,
});
return `${hours_str}:${minutes_str}:${seconds_str}.${millis_str}`;
}
export function parseDurationString(duration: string): number {
const parts = duration.split(':');
const seconds_str = parts.length >= 1 ? parts[parts.length - 1] : '0';
const minutes_str = parts.length >= 2 ? parts[parts.length - 2] : '0';
const hours_str = parts.length >= 3 ? parts[parts.length - 3] : '0';
const seconds = Number.parseFloat(seconds_str);
const minutes = Number.parseFloat(minutes_str);
const hours = Number.parseFloat(hours_str);
return Math.floor(((hours * 60 + minutes) * 60 + seconds) * 1000);
}