49 lines
1.9 KiB
TypeScript
49 lines
1.9 KiB
TypeScript
import dayjs, { Dayjs } from 'dayjs';
|
|
import { Duration } from 'dayjs/plugin/duration.js';
|
|
import Language from './types/Language';
|
|
import { MessageKey, message } from './i18n';
|
|
|
|
export const formatTimestamp = (timestamp: Dayjs): string => timestamp.format('YYYY-MM-DD HH:mm');
|
|
|
|
export const formatTime = (time: Dayjs): string => time.format('HH:mm');
|
|
|
|
export const formatDuration =
|
|
(language: Language) =>
|
|
(duration: Duration, short?: boolean): string => {
|
|
if (duration.hours() === 0 && duration.minutes() === 0) {
|
|
return 'none';
|
|
}
|
|
|
|
let formatString;
|
|
|
|
if (short) {
|
|
formatString = 'HH:mm';
|
|
} else if (language === Language.fi) {
|
|
formatString =
|
|
duration.hours() > 0 && duration.minutes() > 0
|
|
? `H [tunti${duration.hours() > 1 ? 'a' : ''} ja] m [minuutti${duration.minutes() > 1 ? 'a' : ''}]`
|
|
: duration.hours() > 0
|
|
? `H [tunti${duration.hours() > 1 ? 'a' : ''}]`
|
|
: `m [minutti${duration.minutes() > 1 ? 'a' : ''}]`;
|
|
} else {
|
|
formatString =
|
|
duration.hours() > 0 && duration.minutes() > 0
|
|
? `H [hour${duration.hours() > 1 ? 's' : ''} and] m [minute${duration.minutes() > 1 ? 's' : ''}]`
|
|
: duration.hours() > 0
|
|
? `H [hour${duration.hours() > 1 ? 's' : ''}]`
|
|
: `m [minute${duration.minutes() > 1 ? 's' : ''}]`;
|
|
}
|
|
|
|
return duration.format(formatString);
|
|
};
|
|
|
|
export const getHoursRoundedStr = (language: Language) => (duration: Duration) =>
|
|
`(${getHoursRounded(duration)} ${message(language)(MessageKey.hoursRounded)})`;
|
|
|
|
const getHoursRounded = (duration: Duration) => {
|
|
// Round up to the next multiple of 15
|
|
const minutes = Math.ceil(duration.as('minutes') / 15) * 15;
|
|
|
|
// Return as hours
|
|
return dayjs.duration(minutes, 'minutes').asHours();
|
|
};
|