Files
telemetry_visualization/frontend/src/datetime.ts

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);
}