@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.
128 lines • 3.98 kB
JavaScript
/**
* @module Utilities
*/
/**
* The `TimeSpan` class is used for representing time interval.
* `TimeSpan` cannot be negative.
*
* IMPORT_PATH: `"@daiso-tech/core/utilities"`
* @group TimeSpan
*/
export class TimeSpan {
milliseconds;
static secondInMilliseconds = 1000;
static minuteInMilliseconds = 60 * TimeSpan.secondInMilliseconds;
static hourInMilliseconds = 60 * TimeSpan.minuteInMilliseconds;
static dayInMilliseconds = 24 * TimeSpan.hourInMilliseconds;
static deserialize(timeInMs) {
return new TimeSpan(timeInMs);
}
constructor(milliseconds = 0) {
this.milliseconds = milliseconds;
this.milliseconds = Math.max(0, this.milliseconds);
}
serialize() {
return 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(from, to) {
return new TimeSpan().addMilliseconds(to.getTime() - from.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.toMilliseconds());
}
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.toMilliseconds());
}
multiply(value) {
return new TimeSpan(Math.round(value * this.toMilliseconds()));
}
divide(value) {
return new TimeSpan(Math.round(this.toMilliseconds() / value));
}
toMilliseconds() {
return this.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