UNPKG

@silane/datetime

Version:

Date and time library similar to Python's "datetime" package.

286 lines (279 loc) 5.89 kB
"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); }