Adds technical date and time formatting

Adds options for technical date and time formatting and includes the option to show seconds.

Updates time formatting to use UTC-to-local conversion and ensures consistent colon separators for time values.

Adjusts all-day event handling to preserve original start/end times.
This commit is contained in:
Janus C. H. Knudsen 2025-10-03 16:05:22 +02:00
parent c8d78f472d
commit 38737762c5
7 changed files with 370 additions and 26 deletions

View file

@ -11,13 +11,17 @@ export interface TimeFormatSettings {
timezone: string;
use24HourFormat: boolean;
locale: string;
dateFormat: 'locale' | 'technical';
showSeconds: boolean;
}
export class TimeFormatter {
private static settings: TimeFormatSettings = {
timezone: 'Europe/Copenhagen', // Default to Denmark
use24HourFormat: true, // 24-hour format standard in Denmark
locale: 'da-DK' // Danish locale
locale: 'da-DK', // Danish locale
dateFormat: 'technical', // Use technical format yyyy-mm-dd hh:mm:ss
showSeconds: false // Don't show seconds by default
};
/**
@ -88,12 +92,10 @@ export class TimeFormatter {
static format24Hour(date: Date): string {
const localDate = TimeFormatter.convertToLocalTime(date);
return localDate.toLocaleTimeString(TimeFormatter.settings.locale, {
timeZone: TimeFormatter.settings.timezone,
hour: '2-digit',
minute: '2-digit',
hour12: false
});
// Always use colon separator, not locale-specific formatting
let hours = String(localDate.getHours()).padStart(2, '0');
let minutes = String(localDate.getMinutes()).padStart(2, '0');
return `${hours}:${minutes}`;
}
/**
@ -184,4 +186,38 @@ export class TimeFormatter {
}).split(' ').pop() || '';
}
/**
* Format date in technical format: yyyy-mm-dd
*/
static formatDateTechnical(date: Date): string {
let year = date.getFullYear();
let month = String(date.getMonth() + 1).padStart(2, '0');
let day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
}
/**
* Format time in technical format: hh:mm or hh:mm:ss
*/
static formatTimeTechnical(date: Date, includeSeconds: boolean = false): string {
let hours = String(date.getHours()).padStart(2, '0');
let minutes = String(date.getMinutes()).padStart(2, '0');
if (includeSeconds) {
let seconds = String(date.getSeconds()).padStart(2, '0');
return `${hours}:${minutes}:${seconds}`;
}
return `${hours}:${minutes}`;
}
/**
* Format date and time in technical format: yyyy-mm-dd hh:mm:ss
*/
static formatDateTimeTechnical(date: Date): string {
let localDate = TimeFormatter.convertToLocalTime(date);
let dateStr = TimeFormatter.formatDateTechnical(localDate);
let timeStr = TimeFormatter.formatTimeTechnical(localDate, TimeFormatter.settings.showSeconds);
return `${dateStr} ${timeStr}`;
}
}