fix some bug and produce many problem to solve later

This commit is contained in:
2024-11-02 16:27:28 +07:00
parent e86d979ddb
commit 1a5577f8e6
15 changed files with 751 additions and 509 deletions

View File

@@ -1,34 +1,115 @@
// function getOverlapRange(
// startA: number,
// endA: number,
// startB: number,
// endB: number,
// ) {
// const overlapStart = Math.max(startA, startB);
// const overlapEnd = Math.min(endA, endB);
import { Injectable } from '@nestjs/common'
import * as _ from 'lodash'
import {
DateTime,
Settings,
HourNumbers,
MinuteNumbers,
SecondNumbers,
DayNumbers,
WeekdayNumbers,
} from 'luxon'
// return overlapStart < overlapEnd ? { overlapStart, overlapEnd } : null;
// }
Settings.defaultLocale = 'en-US'
Settings.defaultZone = 'utc'
Settings.defaultWeekSettings = {
firstDay: 2,
minimalDays: 1,
weekend: [6, 7],
}
// export function isOverlap(
// startA: number,
// endA: number,
// startB: number,
// endB: number,
// ) {
// return getOverlapRange(startA, endA, startB, endB) !== null;
// }
export type TimeType = {
hour: HourNumbers
minute: MinuteNumbers
second: SecondNumbers
}
// const overlapRange = getOverlapRange(startA, endA, startB, endB);
// if (overlapRange) {
// console.log(
// `Overlap Start: ${new Date(overlapRange.overlapStart).toISOString()}`,
// );
// console.log(
// `Overlap End: ${new Date(overlapRange.overlapEnd).toISOString()}`,
// );
@Injectable()
export class DateTimeUtils {
static getOverlapRange(
startA: DateTime,
endA: DateTime,
startB: DateTime,
endB: DateTime,
): { start: DateTime; end: DateTime } {
const overlapStart = DateTime.max(startA, startB)
const overlapEnd = DateTime.min(endA, endB)
return {
start: overlapStart,
end: overlapEnd,
}
}
// console.log('Is overlap: true');
// } else {
// console.log('No overlap');
// }
static isOverlap(
startA: DateTime,
endA: DateTime,
startB: DateTime,
endB: DateTime,
): boolean {
return (
this.getOverlapRange(startA, endA, startB, endB).start <
this.getOverlapRange(startA, endA, startB, endB).end
)
}
static fromIsoString(isoString: string): DateTime {
const dateTime = DateTime.fromISO(isoString)
if (!dateTime.isValid) {
throw new Error('Invalid date time')
}
return dateTime
}
static fromDate(date: Date): DateTime {
const dateTime = DateTime.fromJSDate(date)
if (!dateTime.isValid) {
throw new Error('Invalid date time')
}
return dateTime
}
static toIsoString(dateTime: DateTime): string {
const isoString = dateTime.toISO()
if (!isoString) {
throw new Error('Invalid date time')
}
return isoString
}
static getTodayWithTime(date: DateTime) {
const today = DateTime.now().set({
hour: date.hour,
minute: date.minute,
second: date.second,
})
return today
}
static getSpecificDateWithNowTime(date: DateTime) {
return date.set({
hour: DateTime.now().hour,
minute: DateTime.now().minute,
second: DateTime.now().second,
})
}
static getATimeWithDateB(a: DateTime, b: DateTime) {
return a.set({
year: b.year,
month: b.month,
day: b.day,
hour: a.hour,
minute: a.minute,
second: a.second,
})
}
// example: 12:00:00
static toTime(time: string): TimeType {
const [hour, minute, second] = time.split(':').map(Number)
return {
hour: hour as HourNumbers,
minute: minute as MinuteNumbers,
second: second as SecondNumbers,
}
}
}