UNPKG

@daiso-tech/core

Version:

The library offers flexible, framework-agnostic solutions for modern web applications, built on adaptable components that integrate seamlessly with popular frameworks like Next Js.

152 lines 4.8 kB
/** * @module TimeSpan */ import {} from "../../serde/contracts/_module.js"; import { TO_MILLISECONDS, } from "../../time-span/contracts/_module.js"; import {} from "../../utilities/_module.js"; /** * The `TimeSpan` class is used for representing time interval. * `TimeSpan` cannot be negative. * * IMPORT_PATH: `"@daiso-tech/core/time-span"` * @group Implementations */ export class TimeSpan { milliseconds; static secondInMilliseconds = 1000; static minuteInMilliseconds = 60 * TimeSpan.secondInMilliseconds; static hourInMilliseconds = 60 * TimeSpan.minuteInMilliseconds; static dayInMilliseconds = 24 * TimeSpan.hourInMilliseconds; static deserialize(serializedValue) { return new TimeSpan(serializedValue.timeInMs); } constructor(milliseconds = 0) { this.milliseconds = milliseconds; this.milliseconds = Math.max(0, this.milliseconds); } equals(value) { return value[TO_MILLISECONDS]() === this.toMilliseconds(); } gt(value) { return value[TO_MILLISECONDS]() < this.toMilliseconds(); } gte(value) { return value[TO_MILLISECONDS]() <= this.toMilliseconds(); } lt(value) { return value[TO_MILLISECONDS]() > this.toMilliseconds(); } lte(value) { return value[TO_MILLISECONDS]() >= this.toMilliseconds(); } serialize() { return { version: "1", timeInMs: this.toMilliseconds(), }; } static fromMilliseconds(milliseconds) { return new TimeSpan().addMilliseconds(milliseconds); } static fromSeconds(seconds) { return new TimeSpan().addSeconds(seconds); } static fromMinutes(minutes) { return new TimeSpan().addMinutes(minutes); } static fromHours(hours) { return new TimeSpan().addHours(hours); } static fromDays(days) { return new TimeSpan().addDays(days); } static fromTimeSpan(timeSpan) { return new TimeSpan().addTimeSpan(timeSpan); } static fromDateRange({ start = new Date(), end = new Date(), }) { return new TimeSpan().addMilliseconds(end.getTime() - start.getTime()); } addMilliseconds(milliseconds) { return new TimeSpan(this.toMilliseconds() + milliseconds); } addSeconds(seconds) { return this.addMilliseconds(TimeSpan.secondInMilliseconds * seconds); } addMinutes(minutes) { return this.addMilliseconds(TimeSpan.minuteInMilliseconds * minutes); } addHours(hours) { return this.addMilliseconds(TimeSpan.hourInMilliseconds * hours); } addDays(days) { return this.addMilliseconds(TimeSpan.dayInMilliseconds * days); } addTimeSpan(timeSpan) { return this.addMilliseconds(timeSpan[TO_MILLISECONDS]()); } subtractMilliseconds(milliseconds) { return new TimeSpan(this.toMilliseconds() - milliseconds); } subtractSeconds(seconds) { return this.subtractMilliseconds(TimeSpan.secondInMilliseconds * seconds); } subtractMinutes(minutes) { return this.subtractMilliseconds(TimeSpan.minuteInMilliseconds * minutes); } subtractHours(hours) { return this.subtractMilliseconds(TimeSpan.hourInMilliseconds * hours); } subtractDays(days) { return this.subtractMilliseconds(TimeSpan.dayInMilliseconds * days); } subtractTimeSpan(timeSpan) { return this.subtractMilliseconds(timeSpan[TO_MILLISECONDS]()); } multiply(value) { return new TimeSpan(Math.round(value * this.toMilliseconds())); } divide(value) { return new TimeSpan(Math.round(this.toMilliseconds() / value)); } [TO_MILLISECONDS]() { return this.milliseconds; } toMilliseconds() { return this[TO_MILLISECONDS](); } toSeconds() { return Math.floor(this.milliseconds / TimeSpan.secondInMilliseconds); } toMinutes() { return Math.floor(this.milliseconds / TimeSpan.minuteInMilliseconds); } toHours() { return Math.floor(this.milliseconds / TimeSpan.hourInMilliseconds); } toDays() { return Math.floor(this.milliseconds / TimeSpan.dayInMilliseconds); } /** * Will return endDate relative to a given `startDate` argument. * * @default * ```ts * new Date() * ``` */ toEndDate(startDate = new Date()) { return new Date(startDate.getTime() + this.toMilliseconds()); } /** * Will return startDate relative to a given `endDate` argument. * * @default * ```ts * new Date() * ``` */ toStartDate(endDate = new Date()) { return new Date(endDate.getTime() - this.toMilliseconds()); } } //# sourceMappingURL=time-span.js.map