/** * Copyright 2026 Reto Meier * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ export const CleanFormattedDateTime = (date: Date): string => { const hours = date.getHours(); const minutes = date.getMinutes(); const ampm = hours >= 12 ? 'pm' : 'am'; // Format hours and minutes to 12h with leading zero const formattedTime = `${(hours % 12 || 12).toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}${ampm}`; const day = date.getDate(); const month = date.toLocaleString('en-US', { month: 'long' }); const year = date.getFullYear(); // Determine ordinal suffix (1st, 2nd, 3rd, 4th, etc.) const getOrdinal = (n: number): string => { const s = ["th", "st", "nd", "rd"]; const v = n % 100; return n + (s[(v - 20) % 10] || s[v] || s[0]); }; return `${formattedTime} on ${month} ${getOrdinal(day)}, ${year}`; };