interface EventInfoSerializeInfo { days: string, start: number, end: number } export default class EventInfo { days: string; start: number; end: number; constructor(days: string, start: number | string, end: number | string) { if (typeof start === "string") { start = parseInt(start, 10); } if (typeof end === "string") { end = parseInt(end, 10); } this.days = days; this.start = start; this.end = end; } static fromJSON({days, start, end}: EventInfoSerializeInfo) { return new EventInfo(days, start, end); } static timeToStr(time: number) { let hour = Math.floor(time / 100); const minute = time % 100; const meridiem = (hour < 12) ? 'AM' : 'PM'; if (hour === 0) { hour = 12; } else if (hour > 12) { hour -= 12; } if (minute < 10) { return `${hour}:0${minute} ${meridiem}`; } return `${hour}:${minute} ${meridiem}`; } conflictsWith(event: EventInfo) { const daysConflict = event.days.match(new RegExp(`[${this.days}]`)); return daysConflict && this.start <= event.end && event.start <= this.end; } get info() { if(this.days === "") { return `WEB`; }else if(this.start === -1 || this.end === -1) { return `${this.days}`; } else { return `${this.days} ${EventInfo.timeToStr(this.start)}-${EventInfo.timeToStr(this.end)}`; } } }