fix some bug and produce many problem to solve later
This commit is contained in:
@@ -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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user