@silane/datetime
Version:
Date and time library similar to Python's "datetime" package.
286 lines (279 loc) • 5.89 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.dtcalc = dtcalc;
var _datetime = require("./datetime.cjs");
/**
* @template T
*/
class DtcalcReturn {
/**
* @param {T} value
*/
constructor(value) {
this._value = value;
}
/**
* @returns {T}
*/
get value() {
return this._value;
}
}
/**
* @template {!Date | !Time | !DateTime | !TimeDelta} T
* @extends DtcalcReturn<T>
*/
class DtcalcComparableReturn extends DtcalcReturn {
/**
* @param {T} value
*/
constructor(value) {
super(value);
}
/**
* Equals.
* @param {T} dtobj
* @returns {!DtcalcReturn<boolean>}
*/
eq(dtobj) {
return dtcalc((0, _datetime.cmp)(this.value, dtobj) === 0);
}
/**
* Not equals.
* @param {T} dtobj
* @returns {!DtcalcReturn<boolean>}
*/
ne(dtobj) {
return dtcalc((0, _datetime.cmp)(this.value, dtobj) !== 0);
}
/**
* Greater than.
* @param {T} dtobj
* @returns {!DtcalcReturn<boolean>}
*/
gt(dtobj) {
return dtcalc((0, _datetime.cmp)(this.value, dtobj) > 0);
}
/**
* Lesser than.
* @param {T} dtobj
* @returns {!DtcalcReturn<boolean>}
*/
lt(dtobj) {
return dtcalc((0, _datetime.cmp)(this.value, dtobj) < 0);
}
/**
* Greater or equals.
* @param {T} dtobj
* @returns {!DtcalcReturn<boolean>}
*/
ge(dtobj) {
return dtcalc((0, _datetime.cmp)(this.value, dtobj) >= 0);
}
/**
* Lesser or equals.
* @param {T} dtobj
* @returns {!DtcalcReturn<boolean>}
*/
le(dtobj) {
return dtcalc((0, _datetime.cmp)(this.value, dtobj) <= 0);
}
}
/**
* @extends {DtcalcComparableReturn<Date>}
*/
class DtcalcDateReturn extends DtcalcComparableReturn {
/**
* @param {!Date} value
*/
constructor(value) {
super(value);
}
/**
* Add.
* @param {!TimeDelta} dtobj
* @returns {!DtcalcDateReturn}
*/
add(dtobj) {
return dtcalc((0, _datetime.add)(this.value, dtobj));
}
/**
* Subtract.
*
* @overload
* @param {!TimeDelta} dtobj
* @returns {!DtcalcDateReturn}
*
* @overload
* @param {!Date} dtobj
* @returns {!DtcalcTimedeltaReturn}
*
* @param {!TimeDelta | !Date} dtobj
* @returns {!DtcalcDateReturn | !DtcalcTimedeltaReturn}
*/
sub(dtobj) {
return dtcalc((0, _datetime.sub)(this.value, /** @type {any} */dtobj));
}
}
/**
* @extends {DtcalcComparableReturn<Time>}
*/
class DtcalcTimeReturn extends DtcalcComparableReturn {
/**
* @param {!Time} value
*/
constructor(value) {
super(value);
}
/**
* Add.
* @param {!TimeDelta} dtobj
* @returns {!DtcalcTimeReturn}
*/
add(dtobj) {
return dtcalc((0, _datetime.add)(this.value, dtobj));
}
/**
* Subtract.
*
* @overload
* @param {!TimeDelta} dtobj
* @returns {!DtcalcTimeReturn}
*
* @overload
* @param {!Time} dtobj
* @returns {!DtcalcTimedeltaReturn}
*
* @param {!TimeDelta | !Time} dtobj
* @returns {!DtcalcTimeReturn | !DtcalcTimedeltaReturn}
*/
sub(dtobj) {
return dtcalc((0, _datetime.sub)(this.value, /** @type {any} */dtobj));
}
}
/**
* @extends {DtcalcComparableReturn<DateTime>}
*/
class DtcalcDatetimeReturn extends DtcalcComparableReturn {
/**
* @param {!DateTime} value
*/
constructor(value) {
super(value);
}
/**
* Add.
* @param {!TimeDelta} dtobj
* @returns {!DtcalcDatetimeReturn}
*/
add(dtobj) {
return dtcalc((0, _datetime.add)(this.value, dtobj));
}
/**
* Subtract.
*
* @overload
* @param {!TimeDelta} dtobj
* @returns {!DtcalcDatetimeReturn}
*
* @overload
* @param {!DateTime} dtobj
* @returns {!DtcalcTimedeltaReturn}
*
* @param {!TimeDelta | !DateTime} dtobj
* @returns {!DtcalcDatetimeReturn | !DtcalcTimedeltaReturn}
*/
sub(dtobj) {
return dtcalc((0, _datetime.sub)(this.value, /** @type {any} */dtobj));
}
}
/**
* @extends {DtcalcComparableReturn<TimeDelta>}
*/
class DtcalcTimedeltaReturn extends DtcalcComparableReturn {
/**
* @param {!TimeDelta} value
*/
constructor(value) {
super(value);
}
/**
* Add.
*
* @overload
* @param {!TimeDelta} dtobj
* @returns {!DtcalcTimedeltaReturn}
*
* @overload
* @param {!DateTime} dtobj
* @returns {!DtcalcDatetimeReturn}
*
* @overload
* @param {!Date} dtobj
* @returns {!DtcalcDateReturn}
*
* @overload
* @param {!Time} dtobj
* @returns {!DtcalcTimeReturn}
*
* @param {!TimeDelta | !Date | !Time | !DateTime} dtobj
* @returns {!DtcalcTimedeltaReturn | !DtcalcDateReturn | !DtcalcTimeReturn | !DtcalcDatetimeReturn}
*/
add(dtobj) {
return /** @type {any} */dtcalc((0, _datetime.add)(this.value, /** @type {any} */dtobj));
}
/**
* Subtract.
* @param {!TimeDelta} dtobj
* @returns {!DtcalcTimedeltaReturn}
*/
sub(dtobj) {
return dtcalc((0, _datetime.sub)(this.value, dtobj));
}
/**
* Negate.
* @returns {!DtcalcTimedeltaReturn}
*/
neg() {
return dtcalc((0, _datetime.neg)(this.value));
}
}
/**
* @overload
* @param {!TimeDelta} dtobj
* @returns {!DtcalcTimedeltaReturn}
*
* @overload
* @param {!DateTime} dtobj
* @returns {!DtcalcDatetimeReturn}
*
* @overload
* @param {!Date} dtobj
* @returns {!DtcalcDateReturn}
*
* @overload
* @param {!Time} dtobj
* @returns {!DtcalcTimeReturn}
*
* @template T
* @overload
* @param {!T} dtobj
* @returns {!DtcalcReturn<T>}
*/
function dtcalc(dtobj) {
if (dtobj instanceof _datetime.DateTime) {
return new DtcalcDatetimeReturn(dtobj);
}
if (dtobj instanceof _datetime.Date) {
return new DtcalcDateReturn(dtobj);
}
if (dtobj instanceof _datetime.Time) {
return new DtcalcTimeReturn(dtobj);
}
if (dtobj instanceof _datetime.TimeDelta) {
return new DtcalcTimedeltaReturn(dtobj);
}
return new DtcalcReturn(dtobj);
}