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:
parent
c8d78f472d
commit
38737762c5
7 changed files with 370 additions and 26 deletions
|
|
@ -1,6 +1,7 @@
|
|||
import { calendarConfig } from '../core/CalendarConfig';
|
||||
import { ColumnBounds } from './ColumnDetectionUtils';
|
||||
import { DateCalculator } from './DateCalculator';
|
||||
import { TimeFormatter } from './TimeFormatter';
|
||||
|
||||
/**
|
||||
* PositionUtils - Static positioning utilities using singleton calendarConfig
|
||||
|
|
@ -209,11 +210,11 @@ export class PositionUtils {
|
|||
}
|
||||
|
||||
/**
|
||||
* Convert ISO datetime to time string using DateCalculator
|
||||
* Convert ISO datetime to time string with UTC-to-local conversion
|
||||
*/
|
||||
public static isoToTimeString(isoString: string): string {
|
||||
const date = new Date(isoString);
|
||||
return DateCalculator.formatTime(date);
|
||||
return TimeFormatter.formatTime(date);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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}`;
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue