33 lines
1.2 KiB
TypeScript
33 lines
1.2 KiB
TypeScript
import dayjs, { Dayjs } from 'dayjs';
|
|
import { Duration } from 'dayjs/plugin/duration.js';
|
|
|
|
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 = (duration: Duration, short?: boolean): string => {
|
|
if (duration.hours() === 0 && duration.minutes() === 0) {
|
|
return 'none';
|
|
}
|
|
|
|
const formatString = short
|
|
? 'HH:mm'
|
|
: 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 = (duration: Duration) =>
|
|
`(${getHoursRounded(duration)} as hours rounded to next even 15 minutes)`;
|
|
|
|
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();
|
|
};
|