Date manager refactor
This commit is contained in:
45
src/services/dateService.ts
Normal file
45
src/services/dateService.ts
Normal 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()
|
Reference in New Issue
Block a user