98 lines
3.2 KiB
TypeScript
98 lines
3.2 KiB
TypeScript
// This function is slow
|
|
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
|
|
).toLocaleString('en-US', {
|
|
minimumIntegerDigits: 2,
|
|
useGrouping: false,
|
|
maximumFractionDigits: 0,
|
|
});
|
|
const day = (utc ? date.getUTCDate() : date.getDate()).toLocaleString(
|
|
'en-US',
|
|
{
|
|
minimumIntegerDigits: 2,
|
|
useGrouping: false,
|
|
maximumFractionDigits: 0,
|
|
},
|
|
);
|
|
const hour = (utc ? date.getUTCHours() : date.getHours()).toLocaleString(
|
|
'en-US',
|
|
{
|
|
minimumIntegerDigits: 2,
|
|
useGrouping: false,
|
|
maximumFractionDigits: 0,
|
|
},
|
|
);
|
|
const minute = (
|
|
utc ? date.getUTCMinutes() : date.getMinutes()
|
|
).toLocaleString('en-US', {
|
|
minimumIntegerDigits: 2,
|
|
useGrouping: false,
|
|
maximumFractionDigits: 0,
|
|
});
|
|
const second = (
|
|
utc ? date.getUTCSeconds() : date.getSeconds()
|
|
).toLocaleString('en-US', {
|
|
minimumIntegerDigits: 2,
|
|
useGrouping: false,
|
|
maximumFractionDigits: 0,
|
|
});
|
|
const milliseconds = (
|
|
utc ? date.getUTCMilliseconds() : date.getMilliseconds()
|
|
).toLocaleString('en-US', {
|
|
minimumIntegerDigits: 3,
|
|
useGrouping: false,
|
|
maximumFractionDigits: 0,
|
|
});
|
|
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);
|
|
}
|