89 lines
2.3 KiB
TypeScript
89 lines
2.3 KiB
TypeScript
export const distanceKm = (meters: number | null | undefined): string =>
|
|
meters === null || meters === undefined
|
|
? '-'
|
|
: `${(meters / 1000).toLocaleString('de-DE', {
|
|
maximumFractionDigits: 2,
|
|
})} km`;
|
|
|
|
export const distanceMeters = (meters: number | null | undefined): string =>
|
|
meters === null || meters === undefined
|
|
? '-'
|
|
: `${Math.round(meters).toLocaleString('de-DE')} m`;
|
|
|
|
export const duration = (seconds: number | null | undefined): string => {
|
|
if (seconds === null || seconds === undefined) {
|
|
return '-';
|
|
}
|
|
|
|
const hours = Math.floor(seconds / 3600);
|
|
const minutes = Math.floor((seconds % 3600) / 60);
|
|
const remainingSeconds = Math.round(seconds % 60);
|
|
|
|
if (hours > 0) {
|
|
return `${hours} h ${minutes.toString().padStart(2, '0')} min`;
|
|
}
|
|
return `${minutes}:${remainingSeconds.toString().padStart(2, '0')} min`;
|
|
};
|
|
|
|
export const elevation = (meters: number | null | undefined): string =>
|
|
meters === null || meters === undefined
|
|
? '-'
|
|
: `${Math.round(meters).toLocaleString('de-DE')} m`;
|
|
|
|
export const speed = (metersPerSecond: number | null | undefined): string =>
|
|
metersPerSecond
|
|
? `${(metersPerSecond * 3.6).toLocaleString('de-DE', {
|
|
maximumFractionDigits: 1,
|
|
})} km/h`
|
|
: '-';
|
|
|
|
export const pace = (
|
|
seconds: number | null | undefined,
|
|
suffix = '/km',
|
|
): string => {
|
|
if (!seconds) {
|
|
return '-';
|
|
}
|
|
|
|
const minutes = Math.floor(seconds / 60);
|
|
const remainingSeconds = Math.round(seconds % 60)
|
|
.toString()
|
|
.padStart(2, '0');
|
|
return `${minutes}:${remainingSeconds} ${suffix}`;
|
|
};
|
|
|
|
export const number = (
|
|
value: number | null | undefined,
|
|
suffix = '',
|
|
maximumFractionDigits = 0,
|
|
): string =>
|
|
value === null || value === undefined
|
|
? '-'
|
|
: `${value.toLocaleString('de-DE', { maximumFractionDigits })}${suffix}`;
|
|
|
|
export const shortDate = (value: string | null | undefined): string => {
|
|
if (!value) {
|
|
return '-';
|
|
}
|
|
|
|
return new Intl.DateTimeFormat('de-DE', {
|
|
day: '2-digit',
|
|
month: '2-digit',
|
|
year: '2-digit',
|
|
}).format(new Date(value));
|
|
};
|
|
|
|
export const dateTime = (value: string | null | undefined): string => {
|
|
if (!value) {
|
|
return '-';
|
|
}
|
|
|
|
return new Intl.DateTimeFormat('de-DE', {
|
|
day: '2-digit',
|
|
month: '2-digit',
|
|
year: 'numeric',
|
|
hour: '2-digit',
|
|
minute: '2-digit',
|
|
}).format(new Date(value));
|
|
};
|