Files
calendar/packages/features/bookings/Booker/utils/dates.tsx
T
98b6d63164 refactor: apply biome formatting to packages/features (#27844)
* refactor: apply biome formatting to packages/features (batch 1 - small subdirs)

Format small subdirectories in packages/features: di, flags, holidays, oauth,
settings, users, assignment-reason, selectedCalendar, hashedLink, host, form,
form-builder, availability, data-table, pbac, schedules, troubleshooter,
eventtypes, calendar-subscription, and root-level files.

Also includes straggler apps/web BookEventForm.tsx.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor: apply biome formatting to packages/features (batch 2 - medium subdirs)

Format medium subdirectories in packages/features: auth, credentials,
calendars, routing-forms, routing-trace, attributes, watchlist, calAIPhone,
tasker, and webhooks.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor: apply biome formatting to packages/features (batch 3 - bookings + insights)

Format bookings and insights subdirectories in packages/features.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor: apply biome formatting to packages/features (batch 4 - ee)

Format packages/features/ee subdirectory covering billing, workflows,
organizations, teams, managed-event-types, round-robin, dsync,
integration-attribute-sync, and payments.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor: apply biome formatting to packages/features (batch 5 - booking-audit part 1)

Format booking-audit di, actions, common, dto, repository, and types
subdirectories in packages/features/booking-audit.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor: apply biome formatting to packages/features (batch 6 - booking-audit part 2)

Format booking-audit service subdirectory in packages/features/booking-audit.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 15:47:14 +01:00

91 lines
2.0 KiB
TypeScript

import { formatDateTime, formatDateTimeRange } from "@calcom/lib/dateTimeFormatter";
import { TimeFormat } from "@calcom/lib/timeFormat";
interface EventFromToTime {
date: string;
duration: number | null;
timeFormat: TimeFormat;
timeZone: string;
language: string;
}
interface EventFromTime {
date: string;
timeFormat: TimeFormat;
timeZone: string;
language: string;
}
export const formatEventFromTime = ({ date, timeFormat, timeZone, language }: EventFromTime) => {
const startDate = new Date(date);
const formattedDate = formatDateTime(startDate, {
locale: language,
timeZone,
dateStyle: "full",
});
const formattedTime = formatDateTime(startDate, {
locale: language,
timeZone,
timeStyle: "short",
hour12: timeFormat === TimeFormat.TWELVE_HOUR,
});
return {
date: formattedDate,
time: timeFormat === TimeFormat.TWELVE_HOUR ? formattedTime.toLowerCase() : formattedTime,
};
};
export const formatEventFromToTime = ({
date,
duration,
timeFormat,
timeZone,
language,
}: EventFromToTime) => {
const startDate = new Date(date);
const endDate = duration
? new Date(new Date(date).setMinutes(startDate.getMinutes() + duration))
: startDate;
const formattedDate = formatDateTimeRange(startDate, endDate, {
locale: language,
timeZone,
dateStyle: "full",
});
const formattedTime = formatDateTimeRange(startDate, endDate, {
locale: language,
timeZone,
timeStyle: "short",
hour12: timeFormat === TimeFormat.TWELVE_HOUR,
});
return {
date: formattedDate,
time: timeFormat === TimeFormat.TWELVE_HOUR ? formattedTime.toLowerCase() : formattedTime,
};
};
export const FromToTime = (props: EventFromToTime) => {
const formatted = formatEventFromToTime(props);
return (
<>
{formatted.date}
<br />
{formatted.time}
</>
);
};
export const FromTime = (props: EventFromTime) => {
const formatted = formatEventFromTime(props);
return (
<>
{formatted.date}, {formatted.time}
</>
);
};