Date manager refactor

This commit is contained in:
2025-02-12 03:16:46 +01:00
parent 8cca44a3b4
commit 14d296e5a9
2 changed files with 74 additions and 71 deletions

View File

@ -0,0 +1,45 @@
interface TimeComponents {
hours: number
minutes: number
}
export class DateService {
public parseTimeString(timeString: string): Date | null {
const timeRegex = /^(\d{1,2}):(\d{2})(?::\d{2})?$/
const match = timeString.match(timeRegex)
if (match && match[1] && match[2]) {
const components: TimeComponents = {
hours: parseInt(match[1], 10),
minutes: parseInt(match[2], 10)
}
return this.isValidTimeComponents(components) ? this.createDateWithComponents(components, new Date()) : null
}
return this.parseFullDate(timeString)
}
public isValidTimeComponents(components: TimeComponents): boolean {
const { hours, minutes } = components
return hours >= 0 && hours < 24 && minutes >= 0 && minutes < 60
}
public createDateWithComponents(components: TimeComponents, baseDate: Date): Date {
const { hours, minutes } = components
const newDate = new Date(baseDate)
newDate.setHours(hours, minutes, 0, 0)
return newDate
}
public parseFullDate(dateString: string): Date | null {
const date = new Date(dateString)
return isNaN(date.getTime()) ? null : date
}
public calculateGameTimeAdvance(gameSpeed: number, updateInterval: number): number {
return gameSpeed * updateInterval
}
}
export default new DateService()