2024-04-05 21:19:26 +02:00
|
|
|
import { locale } from '$lib/stores/preferences.store';
|
2024-02-24 21:23:30 +01:00
|
|
|
import { DateTime, Duration } from 'luxon';
|
2024-04-05 21:19:26 +02:00
|
|
|
import { get } from 'svelte/store';
|
2023-03-27 05:53:35 +02:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Convert time like `01:02:03.456` to seconds.
|
|
|
|
|
*/
|
|
|
|
|
export function timeToSeconds(time: string) {
|
2023-07-01 00:50:47 -04:00
|
|
|
const parts = time.split(':');
|
|
|
|
|
parts[2] = parts[2].split('.').slice(0, 2).join('.');
|
2023-03-27 05:53:35 +02:00
|
|
|
|
2023-07-01 00:50:47 -04:00
|
|
|
const [hours, minutes, seconds] = parts.map(Number);
|
2023-03-27 05:53:35 +02:00
|
|
|
|
2023-07-01 00:50:47 -04:00
|
|
|
return Duration.fromObject({ hours, minutes, seconds }).as('seconds');
|
2023-03-27 05:53:35 +02:00
|
|
|
}
|
2024-02-24 21:23:30 +01:00
|
|
|
|
|
|
|
|
export function parseUtcDate(date: string) {
|
|
|
|
|
return DateTime.fromISO(date, { zone: 'UTC' }).toUTC();
|
|
|
|
|
}
|
2024-04-05 21:19:26 +02:00
|
|
|
|
|
|
|
|
export const getShortDateRange = (startDate: string | Date, endDate: string | Date) => {
|
|
|
|
|
startDate = startDate instanceof Date ? startDate : new Date(startDate);
|
|
|
|
|
endDate = endDate instanceof Date ? endDate : new Date(endDate);
|
|
|
|
|
|
|
|
|
|
const userLocale = get(locale);
|
|
|
|
|
const endDateLocalized = endDate.toLocaleString(userLocale, {
|
|
|
|
|
month: 'short',
|
|
|
|
|
year: 'numeric',
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (startDate.getFullYear() === endDate.getFullYear()) {
|
|
|
|
|
if (startDate.getMonth() === endDate.getMonth()) {
|
|
|
|
|
// Same year and month.
|
|
|
|
|
// e.g.: aug. 2024
|
|
|
|
|
return endDateLocalized;
|
|
|
|
|
} else {
|
|
|
|
|
// Same year but different month.
|
|
|
|
|
// e.g.: jul. - sept. 2024
|
|
|
|
|
const startMonthLocalized = startDate.toLocaleString(userLocale, {
|
|
|
|
|
month: 'short',
|
|
|
|
|
});
|
|
|
|
|
return `${startMonthLocalized} - ${endDateLocalized}`;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// Different year.
|
|
|
|
|
// e.g.: feb. 2021 - sept. 2024
|
|
|
|
|
const startDateLocalized = startDate.toLocaleString(userLocale, {
|
|
|
|
|
month: 'short',
|
|
|
|
|
year: 'numeric',
|
|
|
|
|
});
|
|
|
|
|
return `${startDateLocalized} - ${endDateLocalized}`;
|
|
|
|
|
}
|
|
|
|
|
};
|