@dereekb/date 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/package.json +19 -0
- package/src/index.d.ts +3 -0
- package/src/index.js +7 -0
- package/src/index.js.map +1 -0
- package/src/lib/date/date.calendar.d.ts +29 -0
- package/src/lib/date/date.calendar.js +54 -0
- package/src/lib/date/date.calendar.js.map +1 -0
- package/src/lib/date/date.d.ts +61 -0
- package/src/lib/date/date.duration.d.ts +9 -0
- package/src/lib/date/date.duration.js +35 -0
- package/src/lib/date/date.duration.js.map +1 -0
- package/src/lib/date/date.format.d.ts +11 -0
- package/src/lib/date/date.format.js +60 -0
- package/src/lib/date/date.format.js.map +1 -0
- package/src/lib/date/date.hashset.d.ts +4 -0
- package/src/lib/date/date.hashset.js +11 -0
- package/src/lib/date/date.hashset.js.map +1 -0
- package/src/lib/date/date.js +131 -0
- package/src/lib/date/date.js.map +1 -0
- package/src/lib/date/date.range.d.ts +107 -0
- package/src/lib/date/date.range.js +222 -0
- package/src/lib/date/date.range.js.map +1 -0
- package/src/lib/date/date.round.d.ts +14 -0
- package/src/lib/date/date.round.js +48 -0
- package/src/lib/date/date.round.js.map +1 -0
- package/src/lib/date/date.sort.d.ts +10 -0
- package/src/lib/date/date.sort.js +25 -0
- package/src/lib/date/date.sort.js.map +1 -0
- package/src/lib/date/date.time.d.ts +82 -0
- package/src/lib/date/date.time.js +208 -0
- package/src/lib/date/date.time.js.map +1 -0
- package/src/lib/date/date.time.limit.d.ts +59 -0
- package/src/lib/date/date.time.limit.js +93 -0
- package/src/lib/date/date.time.limit.js.map +1 -0
- package/src/lib/date/date.time.minute.d.ts +73 -0
- package/src/lib/date/date.time.minute.js +104 -0
- package/src/lib/date/date.time.minute.js.map +1 -0
- package/src/lib/date/date.timezone.d.ts +74 -0
- package/src/lib/date/date.timezone.js +126 -0
- package/src/lib/date/date.timezone.js.map +1 -0
- package/src/lib/date/date.unix.d.ts +6 -0
- package/src/lib/date/date.unix.js +41 -0
- package/src/lib/date/date.unix.js.map +1 -0
- package/src/lib/date/index.d.ts +13 -0
- package/src/lib/date/index.js +17 -0
- package/src/lib/date/index.js.map +1 -0
- package/src/lib/date.request.d.ts +22 -0
- package/src/lib/date.request.js +3 -0
- package/src/lib/date.request.js.map +1 -0
- package/src/lib/expires/expires.d.ts +39 -0
- package/src/lib/expires/expires.js +74 -0
- package/src/lib/expires/expires.js.map +1 -0
- package/src/lib/expires/index.d.ts +1 -0
- package/src/lib/expires/index.js +5 -0
- package/src/lib/expires/index.js.map +1 -0
- package/src/lib/rrule/date.recurrence.d.ts +60 -0
- package/src/lib/rrule/date.recurrence.js +84 -0
- package/src/lib/rrule/date.recurrence.js.map +1 -0
- package/src/lib/rrule/date.rrule.d.ts +125 -0
- package/src/lib/rrule/date.rrule.extension.d.ts +74 -0
- package/src/lib/rrule/date.rrule.extension.js +147 -0
- package/src/lib/rrule/date.rrule.extension.js.map +1 -0
- package/src/lib/rrule/date.rrule.js +180 -0
- package/src/lib/rrule/date.rrule.js.map +1 -0
- package/src/lib/rrule/date.rrule.parse.d.ts +114 -0
- package/src/lib/rrule/date.rrule.parse.js +131 -0
- package/src/lib/rrule/date.rrule.parse.js.map +1 -0
- package/src/lib/rrule/index.d.ts +4 -0
- package/src/lib/rrule/index.js +8 -0
- package/src/lib/rrule/index.js.map +1 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Minutes, Hours, Days, LogicalDate, Maybe } from "@dereekb/util";
|
|
2
|
+
export interface LimitDateTimeConfig {
|
|
3
|
+
/**
|
|
4
|
+
* The relative instant to use when deriving limits.
|
|
5
|
+
*/
|
|
6
|
+
instant?: Date;
|
|
7
|
+
/**
|
|
8
|
+
* Whether or not to take the next upcoming time of the input.
|
|
9
|
+
*/
|
|
10
|
+
takeNextUpcomingTime?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Whether or not to round the date down to the nearest minute.
|
|
13
|
+
*/
|
|
14
|
+
roundDownToMinute?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Limits to use for this configuration.
|
|
17
|
+
*/
|
|
18
|
+
limits?: {
|
|
19
|
+
/**
|
|
20
|
+
* The minimum date allowed.
|
|
21
|
+
*/
|
|
22
|
+
min?: Date;
|
|
23
|
+
/**
|
|
24
|
+
* The maximum date allowed.
|
|
25
|
+
*/
|
|
26
|
+
max?: Date;
|
|
27
|
+
/**
|
|
28
|
+
* The date must be in the future.
|
|
29
|
+
*/
|
|
30
|
+
isFuture?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* The date must be in the past.
|
|
33
|
+
*/
|
|
34
|
+
isPast?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Minimum limits derived from the future.
|
|
37
|
+
*/
|
|
38
|
+
future?: {
|
|
39
|
+
minutes?: Minutes;
|
|
40
|
+
hours?: Hours;
|
|
41
|
+
days?: Days;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Used for deriving a limit for the current instant in time.
|
|
47
|
+
*/
|
|
48
|
+
export declare class LimitDateTimeInstance {
|
|
49
|
+
readonly config: LimitDateTimeConfig;
|
|
50
|
+
constructor(config?: LimitDateTimeConfig);
|
|
51
|
+
get instant(): LogicalDate;
|
|
52
|
+
get minimumMinutesIntoFuture(): Maybe<Minutes>;
|
|
53
|
+
get min(): Maybe<LogicalDate>;
|
|
54
|
+
get max(): Maybe<LogicalDate>;
|
|
55
|
+
/**
|
|
56
|
+
* Limits the input date to the current time.
|
|
57
|
+
*/
|
|
58
|
+
limit(date: Date): Date;
|
|
59
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LimitDateTimeInstance = void 0;
|
|
4
|
+
const util_1 = require("@dereekb/util");
|
|
5
|
+
const date_fns_1 = require("date-fns");
|
|
6
|
+
const date_1 = require("./date");
|
|
7
|
+
/**
|
|
8
|
+
* Used for deriving a limit for the current instant in time.
|
|
9
|
+
*/
|
|
10
|
+
class LimitDateTimeInstance {
|
|
11
|
+
constructor(config = {}) {
|
|
12
|
+
this.config = config;
|
|
13
|
+
}
|
|
14
|
+
get instant() {
|
|
15
|
+
return this.config.instant || 'now';
|
|
16
|
+
}
|
|
17
|
+
get minimumMinutesIntoFuture() {
|
|
18
|
+
var _a;
|
|
19
|
+
const { limits = {} } = this.config;
|
|
20
|
+
const { future } = limits;
|
|
21
|
+
let minutes;
|
|
22
|
+
if (future) {
|
|
23
|
+
minutes = (_a = future.minutes) !== null && _a !== void 0 ? _a : 0;
|
|
24
|
+
if (future.hours) {
|
|
25
|
+
minutes += Math.floor(future.hours * 60);
|
|
26
|
+
}
|
|
27
|
+
if (future.days) {
|
|
28
|
+
minutes += Math.floor((0, date_1.daysToMinutes)(future.days));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return minutes;
|
|
32
|
+
}
|
|
33
|
+
get min() {
|
|
34
|
+
const { instant = new Date(), limits = {} } = this.config;
|
|
35
|
+
const { isFuture, future, min } = limits;
|
|
36
|
+
let limit = min;
|
|
37
|
+
if (future || isFuture) {
|
|
38
|
+
if (!min || (0, date_1.isAfter)(min, instant)) {
|
|
39
|
+
limit = util_1.DATE_NOW_VALUE;
|
|
40
|
+
}
|
|
41
|
+
else if (future) {
|
|
42
|
+
const minimumMinutesIntoFuture = this.minimumMinutesIntoFuture;
|
|
43
|
+
limit = (0, date_fns_1.addMinutes)(instant, minimumMinutesIntoFuture !== null && minimumMinutesIntoFuture !== void 0 ? minimumMinutesIntoFuture : 0);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return limit;
|
|
47
|
+
}
|
|
48
|
+
get max() {
|
|
49
|
+
const { instant = new Date(), limits = {} } = this.config;
|
|
50
|
+
const { isPast, max } = limits;
|
|
51
|
+
let limit = max;
|
|
52
|
+
if (isPast) {
|
|
53
|
+
if (!max || (0, date_fns_1.isBefore)(max, instant)) {
|
|
54
|
+
limit = util_1.DATE_NOW_VALUE;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return limit;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Limits the input date to the current time.
|
|
61
|
+
*/
|
|
62
|
+
limit(date) {
|
|
63
|
+
var _a;
|
|
64
|
+
const { min, max } = this;
|
|
65
|
+
const now = new Date();
|
|
66
|
+
let result = date;
|
|
67
|
+
if (min) {
|
|
68
|
+
if (min === util_1.DATE_NOW_VALUE) {
|
|
69
|
+
result = (0, date_1.isAfter)(date, now) ? now : date;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
result = (0, date_fns_1.max)([date, min]);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (max) {
|
|
76
|
+
if (max === util_1.DATE_NOW_VALUE) {
|
|
77
|
+
result = (0, date_fns_1.isBefore)(date, now) ? now : date;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
result = (0, date_fns_1.min)([date, max]);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (this.config.takeNextUpcomingTime) {
|
|
84
|
+
result = (0, date_1.takeNextUpcomingTime)(result, (_a = this.config.roundDownToMinute) !== null && _a !== void 0 ? _a : false);
|
|
85
|
+
}
|
|
86
|
+
else if (this.config.roundDownToMinute) {
|
|
87
|
+
result = (0, date_1.roundDownToMinute)(result);
|
|
88
|
+
}
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.LimitDateTimeInstance = LimitDateTimeInstance;
|
|
93
|
+
//# sourceMappingURL=date.time.limit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.time.limit.js","sourceRoot":"","sources":["../../../../../../packages/date/src/lib/date/date.time.limit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Minutes } from '@dereekb/util';
|
|
2
|
+
import { StepRoundDateTimeDown } from './date.round';
|
|
3
|
+
import { LimitDateTimeConfig } from './date.time.limit';
|
|
4
|
+
export interface DateTimeMinuteConfig extends LimitDateTimeConfig {
|
|
5
|
+
date?: Date;
|
|
6
|
+
/**
|
|
7
|
+
* Number of minutes each "step" is.
|
|
8
|
+
*/
|
|
9
|
+
step?: Minutes;
|
|
10
|
+
/**
|
|
11
|
+
* Additional behavior
|
|
12
|
+
*/
|
|
13
|
+
behavior?: {
|
|
14
|
+
/**
|
|
15
|
+
* Whether or not to set the date to the min if the steps go above it.
|
|
16
|
+
*/
|
|
17
|
+
capToMinLimit?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Whether or not to set the date to the max if the steps go above it.
|
|
20
|
+
*/
|
|
21
|
+
capToMaxLimit?: boolean;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Current state of the date in the instance.
|
|
26
|
+
*/
|
|
27
|
+
export interface DateTimeMinuteDateStatus {
|
|
28
|
+
/**
|
|
29
|
+
* If the date is at the minimum value.
|
|
30
|
+
*/
|
|
31
|
+
isAfterMinimum: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* If thte date is at the maximum value.
|
|
34
|
+
*/
|
|
35
|
+
isBeforeMaximum: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* If the date is in the future.
|
|
38
|
+
*/
|
|
39
|
+
inFuture: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* If the date is in the future at the minimum number of future minutes requested.
|
|
42
|
+
*/
|
|
43
|
+
inFutureMinutes: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* If the date is in the past.
|
|
46
|
+
*/
|
|
47
|
+
inPast: boolean;
|
|
48
|
+
}
|
|
49
|
+
export interface RoundDateTimeMinute extends StepRoundDateTimeDown {
|
|
50
|
+
roundToBounds?: boolean;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Instance for working with a single date/time.
|
|
54
|
+
*
|
|
55
|
+
* Can step the date forward/backwards, and validate
|
|
56
|
+
*/
|
|
57
|
+
export declare class DateTimeMinuteInstance {
|
|
58
|
+
readonly config: DateTimeMinuteConfig;
|
|
59
|
+
private _date;
|
|
60
|
+
private _step;
|
|
61
|
+
private _limit;
|
|
62
|
+
constructor(config?: DateTimeMinuteConfig);
|
|
63
|
+
get date(): Date;
|
|
64
|
+
set date(date: Date);
|
|
65
|
+
get step(): Minutes;
|
|
66
|
+
set step(step: Minutes);
|
|
67
|
+
getStatus(date?: Date): DateTimeMinuteDateStatus;
|
|
68
|
+
round(round: RoundDateTimeMinute): Date;
|
|
69
|
+
limit(date?: Date): Date;
|
|
70
|
+
protected _takeBoundedDate(date?: Date): Date;
|
|
71
|
+
protected _takeMinimumBoundedDate(date?: Date): Date;
|
|
72
|
+
protected _takeMaximumBoundedDate(date?: Date): Date;
|
|
73
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DateTimeMinuteInstance = void 0;
|
|
4
|
+
const util_1 = require("@dereekb/util");
|
|
5
|
+
const date_fns_1 = require("date-fns");
|
|
6
|
+
const date_round_1 = require("./date.round");
|
|
7
|
+
const date_time_limit_1 = require("./date.time.limit");
|
|
8
|
+
/**
|
|
9
|
+
* Instance for working with a single date/time.
|
|
10
|
+
*
|
|
11
|
+
* Can step the date forward/backwards, and validate
|
|
12
|
+
*/
|
|
13
|
+
class DateTimeMinuteInstance {
|
|
14
|
+
constructor(config = {}) {
|
|
15
|
+
var _a, _b;
|
|
16
|
+
this.config = config;
|
|
17
|
+
this._date = (_a = config.date) !== null && _a !== void 0 ? _a : new Date();
|
|
18
|
+
this._step = (_b = config.step) !== null && _b !== void 0 ? _b : 1;
|
|
19
|
+
this._limit = new date_time_limit_1.LimitDateTimeInstance(config);
|
|
20
|
+
}
|
|
21
|
+
get date() {
|
|
22
|
+
return this._date;
|
|
23
|
+
}
|
|
24
|
+
set date(date) {
|
|
25
|
+
this._date = date;
|
|
26
|
+
}
|
|
27
|
+
get step() {
|
|
28
|
+
return this._step;
|
|
29
|
+
}
|
|
30
|
+
set step(step) {
|
|
31
|
+
this._step = step;
|
|
32
|
+
}
|
|
33
|
+
getStatus(date = this.date) {
|
|
34
|
+
let isBeforeMaximum = true;
|
|
35
|
+
let isAfterMinimum = true;
|
|
36
|
+
let inFuture = true;
|
|
37
|
+
let inFutureMinutes = true;
|
|
38
|
+
let inPast = true;
|
|
39
|
+
const { limits = {} } = this._limit.config;
|
|
40
|
+
const { minimumMinutesIntoFuture } = this._limit;
|
|
41
|
+
const now = (0, date_fns_1.set)(new Date(), { seconds: 0, milliseconds: 0 });
|
|
42
|
+
// Min/Future
|
|
43
|
+
if (limits.min) {
|
|
44
|
+
isAfterMinimum = (0, date_fns_1.isAfter)(date, limits.min);
|
|
45
|
+
}
|
|
46
|
+
if (minimumMinutesIntoFuture) {
|
|
47
|
+
const minFutureDateTime = (0, date_fns_1.addMinutes)(now, minimumMinutesIntoFuture);
|
|
48
|
+
inFutureMinutes = (0, date_fns_1.isAfter)(now, minFutureDateTime);
|
|
49
|
+
}
|
|
50
|
+
else if (limits.isFuture) {
|
|
51
|
+
inFuture = (0, date_fns_1.isAfter)(date, now);
|
|
52
|
+
}
|
|
53
|
+
// Max/Past
|
|
54
|
+
if (limits.max) {
|
|
55
|
+
isBeforeMaximum = (0, date_fns_1.isBefore)(date, limits.max);
|
|
56
|
+
}
|
|
57
|
+
if (limits.isPast) {
|
|
58
|
+
inPast = (0, date_fns_1.isBefore)(date, now);
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
isBeforeMaximum,
|
|
62
|
+
isAfterMinimum,
|
|
63
|
+
inFuture,
|
|
64
|
+
inFutureMinutes,
|
|
65
|
+
inPast
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
round(round) {
|
|
69
|
+
var _a;
|
|
70
|
+
let date = (0, date_round_1.roundDateTimeDownToSteps)(this.date, Object.assign(Object.assign({}, round), { step: (_a = round.step) !== null && _a !== void 0 ? _a : this.step }));
|
|
71
|
+
if (round.roundToBounds) {
|
|
72
|
+
date = this._takeBoundedDate(date);
|
|
73
|
+
}
|
|
74
|
+
return date;
|
|
75
|
+
}
|
|
76
|
+
limit(date = this.date) {
|
|
77
|
+
return this._limit.limit(date);
|
|
78
|
+
}
|
|
79
|
+
_takeBoundedDate(date = this.date) {
|
|
80
|
+
return this._takeMaximumBoundedDate(this._takeMinimumBoundedDate(date));
|
|
81
|
+
}
|
|
82
|
+
_takeMinimumBoundedDate(date = this.date) {
|
|
83
|
+
var _a;
|
|
84
|
+
if (((_a = this.config.behavior) === null || _a === void 0 ? void 0 : _a.capToMinLimit) !== false) {
|
|
85
|
+
const min = (0, util_1.dateFromLogicalDate)(this._limit.min);
|
|
86
|
+
if (min && (0, date_fns_1.isBefore)(date, min)) {
|
|
87
|
+
date = min;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return date;
|
|
91
|
+
}
|
|
92
|
+
_takeMaximumBoundedDate(date = this.date) {
|
|
93
|
+
var _a;
|
|
94
|
+
if (((_a = this.config.behavior) === null || _a === void 0 ? void 0 : _a.capToMaxLimit) !== false) {
|
|
95
|
+
const max = (0, util_1.dateFromLogicalDate)(this._limit.max);
|
|
96
|
+
if (max && (0, date_fns_1.isAfter)(date, max)) {
|
|
97
|
+
date = max;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return date;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
exports.DateTimeMinuteInstance = DateTimeMinuteInstance;
|
|
104
|
+
//# sourceMappingURL=date.time.minute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.time.minute.js","sourceRoot":"","sources":["../../../../../../packages/date/src/lib/date/date.time.minute.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Maybe, TimezoneString } from '@dereekb/util';
|
|
2
|
+
/**
|
|
3
|
+
* Inherited from the RRule library where RRule only deals with UTC date/times, dates going into it must always be in UTC.
|
|
4
|
+
*
|
|
5
|
+
* We use this "weird" date when transforming an instance (11AM in Los Angeles) into a UTC date that says the same thing,
|
|
6
|
+
* 11AM UTC.
|
|
7
|
+
*
|
|
8
|
+
* BaseDateAsUTC lets us simplify time changes and printing time strings by removing the concept of timezones, as we can now assume 2AM is always "2AM".
|
|
9
|
+
*
|
|
10
|
+
* When using base dates, we can target any timezone after performing date conversions without worrying about things such as daylight savings, etc.
|
|
11
|
+
*/
|
|
12
|
+
export declare type BaseDateAsUTC = Date;
|
|
13
|
+
export interface DateTimezoneConversionFnConfig {
|
|
14
|
+
/**
|
|
15
|
+
* Uses the computed offset between the system and the timezone specified here.
|
|
16
|
+
*/
|
|
17
|
+
betweenSystemAndOffset?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface DateTimezoneConversionConfig {
|
|
20
|
+
/**
|
|
21
|
+
* Timezone to be relative to. If not defined, values are returned in UTC.
|
|
22
|
+
*/
|
|
23
|
+
timezone?: TimezoneString;
|
|
24
|
+
/**
|
|
25
|
+
* Whether or not to use the system timezone/offset.
|
|
26
|
+
*
|
|
27
|
+
* This will convert between UTC and the system timezone.
|
|
28
|
+
*/
|
|
29
|
+
useSystemTimezone?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Custom timezone offset to specify for the result.
|
|
32
|
+
*/
|
|
33
|
+
timezoneOffset?: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Returns true if both inputs are considered equivalent.
|
|
37
|
+
*
|
|
38
|
+
* @param a
|
|
39
|
+
* @param b
|
|
40
|
+
* @returns
|
|
41
|
+
*/
|
|
42
|
+
export declare function isSameDateTimezoneConversionConfig(a: DateTimezoneConversionConfig, b: DateTimezoneConversionConfig): boolean;
|
|
43
|
+
export declare function getCurrentSystemOffsetInMs(date: Date): number;
|
|
44
|
+
interface InternalDateTimezoneBaseDateConverter {
|
|
45
|
+
getCurrentOffset(date: Date): number;
|
|
46
|
+
normalDateToBaseDate(date: Date, addOffset?: number): Date;
|
|
47
|
+
baseDateToNormalDate(date: Date, addOffset?: number): Date;
|
|
48
|
+
}
|
|
49
|
+
export interface DateTimezoneBaseDateConverter extends InternalDateTimezoneBaseDateConverter {
|
|
50
|
+
normalDateToBaseDate(date: Date): Date;
|
|
51
|
+
baseDateToNormalDate(date: Date): Date;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Used for converting Dates to/from a UTC "base date" to a "normal date".
|
|
55
|
+
*
|
|
56
|
+
* This can generally be used for converting from/to the target offset as well.
|
|
57
|
+
*/
|
|
58
|
+
export declare class DateTimezoneUtcNormalInstance implements DateTimezoneBaseDateConverter {
|
|
59
|
+
readonly config: DateTimezoneConversionConfig;
|
|
60
|
+
readonly hasConversion: boolean;
|
|
61
|
+
private readonly _converter;
|
|
62
|
+
constructor(config: Maybe<TimezoneString> | DateTimezoneConversionConfig);
|
|
63
|
+
getCurrentOffset(date: Date): number;
|
|
64
|
+
baseDateToNormalDate(date: Date): Date;
|
|
65
|
+
normalDateToBaseDate(date: Date): Date;
|
|
66
|
+
_baseDateToNormalDate(date: Date, config: DateTimezoneConversionFnConfig): Date;
|
|
67
|
+
_normalDateToBaseDate(date: Date, config: DateTimezoneConversionFnConfig): Date;
|
|
68
|
+
_calculateAddFromConfig(date: Date, config: DateTimezoneConversionFnConfig): number;
|
|
69
|
+
}
|
|
70
|
+
export declare function baseDateToNormalDate(date: Date, timezone: Maybe<TimezoneString>): Date;
|
|
71
|
+
export declare function normalDateToBaseDate(date: Date, timezone: Maybe<TimezoneString>): Date;
|
|
72
|
+
export declare function systemBaseDateToNormalDate(date: Date): Date;
|
|
73
|
+
export declare function systemNormalDateToBaseDate(date: Date): Date;
|
|
74
|
+
export {};
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.systemNormalDateToBaseDate = exports.systemBaseDateToNormalDate = exports.normalDateToBaseDate = exports.baseDateToNormalDate = exports.DateTimezoneUtcNormalInstance = exports.getCurrentSystemOffsetInMs = exports.isSameDateTimezoneConversionConfig = void 0;
|
|
4
|
+
const util_1 = require("@dereekb/util");
|
|
5
|
+
const date_fns_1 = require("date-fns");
|
|
6
|
+
const date_fns_tz_1 = require("date-fns-tz");
|
|
7
|
+
const date_1 = require("./date");
|
|
8
|
+
/**
|
|
9
|
+
* Returns true if both inputs are considered equivalent.
|
|
10
|
+
*
|
|
11
|
+
* @param a
|
|
12
|
+
* @param b
|
|
13
|
+
* @returns
|
|
14
|
+
*/
|
|
15
|
+
function isSameDateTimezoneConversionConfig(a, b) {
|
|
16
|
+
let isSame = false;
|
|
17
|
+
if (a.useSystemTimezone || b.useSystemTimezone || a.timezoneOffset || b.timezoneOffset) {
|
|
18
|
+
isSame = (0, util_1.isSameNonNullValue)(a.useSystemTimezone, b.useSystemTimezone) || (0, util_1.isSameNonNullValue)(a.timezoneOffset, b.timezoneOffset);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
isSame = ((0, util_1.isConsideredUtcTimezoneString)(a.timezone) && (0, util_1.isConsideredUtcTimezoneString)(b.timezone)) || (a != null && a === b);
|
|
22
|
+
}
|
|
23
|
+
return isSame;
|
|
24
|
+
}
|
|
25
|
+
exports.isSameDateTimezoneConversionConfig = isSameDateTimezoneConversionConfig;
|
|
26
|
+
function getCurrentSystemOffsetInMs(date) {
|
|
27
|
+
return (0, date_1.minutesToMs)(date.getTimezoneOffset());
|
|
28
|
+
}
|
|
29
|
+
exports.getCurrentSystemOffsetInMs = getCurrentSystemOffsetInMs;
|
|
30
|
+
/**
|
|
31
|
+
* Used for converting Dates to/from a UTC "base date" to a "normal date".
|
|
32
|
+
*
|
|
33
|
+
* This can generally be used for converting from/to the target offset as well.
|
|
34
|
+
*/
|
|
35
|
+
class DateTimezoneUtcNormalInstance {
|
|
36
|
+
constructor(config) {
|
|
37
|
+
var _a;
|
|
38
|
+
if (config == null) {
|
|
39
|
+
config = util_1.UTC_TIMEZONE_STRING;
|
|
40
|
+
}
|
|
41
|
+
if (typeof config === 'string') {
|
|
42
|
+
config = { timezone: config };
|
|
43
|
+
}
|
|
44
|
+
if (config.useSystemTimezone === true || config.timezoneOffset == null) {
|
|
45
|
+
config.timezone = (_a = config.timezone) !== null && _a !== void 0 ? _a : util_1.UTC_TIMEZONE_STRING;
|
|
46
|
+
}
|
|
47
|
+
this.config = config;
|
|
48
|
+
let getOffsetInMsFn;
|
|
49
|
+
if (config.useSystemTimezone === true) {
|
|
50
|
+
// Configure below
|
|
51
|
+
getOffsetInMsFn = getCurrentSystemOffsetInMs;
|
|
52
|
+
}
|
|
53
|
+
else if (config.timezoneOffset != null) {
|
|
54
|
+
getOffsetInMsFn = () => this.config.timezoneOffset;
|
|
55
|
+
}
|
|
56
|
+
else if (config.timezone) {
|
|
57
|
+
getOffsetInMsFn = (date) => (0, date_fns_tz_1.getTimezoneOffset)(this.config.timezone, date);
|
|
58
|
+
}
|
|
59
|
+
const hasConversion = Boolean(getOffsetInMsFn);
|
|
60
|
+
if (hasConversion) {
|
|
61
|
+
function calculateOffset(date, addOffset = 0) {
|
|
62
|
+
const offset = getOffsetInMsFn(date);
|
|
63
|
+
const total = offset + addOffset;
|
|
64
|
+
return total;
|
|
65
|
+
}
|
|
66
|
+
this._converter = {
|
|
67
|
+
getCurrentOffset: getOffsetInMsFn,
|
|
68
|
+
baseDateToNormalDate: (x, addOffset) => {
|
|
69
|
+
return (0, date_fns_1.addMilliseconds)(x, -calculateOffset(x, addOffset));
|
|
70
|
+
},
|
|
71
|
+
normalDateToBaseDate: (x, addOffset) => {
|
|
72
|
+
return (0, date_fns_1.addMilliseconds)(x, calculateOffset(x, addOffset));
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
this._converter = {
|
|
78
|
+
getCurrentOffset: () => 0,
|
|
79
|
+
baseDateToNormalDate: (x) => x,
|
|
80
|
+
normalDateToBaseDate: (x) => x
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
this.hasConversion = hasConversion;
|
|
84
|
+
}
|
|
85
|
+
// MARK: DateTimezoneBaseDateConverter
|
|
86
|
+
getCurrentOffset(date) {
|
|
87
|
+
return this._converter.getCurrentOffset(date);
|
|
88
|
+
}
|
|
89
|
+
baseDateToNormalDate(date) {
|
|
90
|
+
return this._converter.baseDateToNormalDate(date);
|
|
91
|
+
}
|
|
92
|
+
normalDateToBaseDate(date) {
|
|
93
|
+
return this._converter.normalDateToBaseDate(date);
|
|
94
|
+
}
|
|
95
|
+
_baseDateToNormalDate(date, config) {
|
|
96
|
+
return this._converter.baseDateToNormalDate(date, this._calculateAddFromConfig(date, config));
|
|
97
|
+
}
|
|
98
|
+
_normalDateToBaseDate(date, config) {
|
|
99
|
+
return this._converter.normalDateToBaseDate(date, this._calculateAddFromConfig(date, config));
|
|
100
|
+
}
|
|
101
|
+
_calculateAddFromConfig(date, config) {
|
|
102
|
+
let add = 0;
|
|
103
|
+
if (config.betweenSystemAndOffset) {
|
|
104
|
+
add = getCurrentSystemOffsetInMs(date);
|
|
105
|
+
}
|
|
106
|
+
return add;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
exports.DateTimezoneUtcNormalInstance = DateTimezoneUtcNormalInstance;
|
|
110
|
+
function baseDateToNormalDate(date, timezone) {
|
|
111
|
+
return new DateTimezoneUtcNormalInstance(timezone).baseDateToNormalDate(date);
|
|
112
|
+
}
|
|
113
|
+
exports.baseDateToNormalDate = baseDateToNormalDate;
|
|
114
|
+
function normalDateToBaseDate(date, timezone) {
|
|
115
|
+
return new DateTimezoneUtcNormalInstance(timezone).normalDateToBaseDate(date);
|
|
116
|
+
}
|
|
117
|
+
exports.normalDateToBaseDate = normalDateToBaseDate;
|
|
118
|
+
function systemBaseDateToNormalDate(date) {
|
|
119
|
+
return new DateTimezoneUtcNormalInstance({ useSystemTimezone: true }).baseDateToNormalDate(date);
|
|
120
|
+
}
|
|
121
|
+
exports.systemBaseDateToNormalDate = systemBaseDateToNormalDate;
|
|
122
|
+
function systemNormalDateToBaseDate(date) {
|
|
123
|
+
return new DateTimezoneUtcNormalInstance({ useSystemTimezone: true }).normalDateToBaseDate(date);
|
|
124
|
+
}
|
|
125
|
+
exports.systemNormalDateToBaseDate = systemNormalDateToBaseDate;
|
|
126
|
+
//# sourceMappingURL=date.timezone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.timezone.js","sourceRoot":"","sources":["../../../../../../packages/date/src/lib/date/date.timezone.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Maybe, DateOrUnixDateTimeNumber, UnixDateTimeNumber } from "@dereekb/util";
|
|
2
|
+
export declare function unixTimeNumberFromDateOrTimeNumber(input: Maybe<DateOrUnixDateTimeNumber>): Maybe<UnixDateTimeNumber>;
|
|
3
|
+
export declare function dateFromDateOrTimeNumber(input: Maybe<DateOrUnixDateTimeNumber>): Maybe<Date>;
|
|
4
|
+
export declare function unixTimeNumberToDate(dateTimeNumber: Maybe<UnixDateTimeNumber>): Maybe<Date>;
|
|
5
|
+
export declare function unixTimeNumberForNow(): UnixDateTimeNumber;
|
|
6
|
+
export declare function unixTimeNumberFromDate(date: Maybe<Date>): Maybe<UnixDateTimeNumber>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.unixTimeNumberFromDate = exports.unixTimeNumberForNow = exports.unixTimeNumberToDate = exports.dateFromDateOrTimeNumber = exports.unixTimeNumberFromDateOrTimeNumber = void 0;
|
|
4
|
+
const date_fns_1 = require("date-fns");
|
|
5
|
+
function unixTimeNumberFromDateOrTimeNumber(input) {
|
|
6
|
+
if (input == null) {
|
|
7
|
+
return input;
|
|
8
|
+
}
|
|
9
|
+
else if ((0, date_fns_1.isDate)(input)) {
|
|
10
|
+
return unixTimeNumberFromDate(input);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
return input;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.unixTimeNumberFromDateOrTimeNumber = unixTimeNumberFromDateOrTimeNumber;
|
|
17
|
+
function dateFromDateOrTimeNumber(input) {
|
|
18
|
+
if (input == null) {
|
|
19
|
+
return input;
|
|
20
|
+
}
|
|
21
|
+
else if ((0, date_fns_1.isDate)(input)) {
|
|
22
|
+
return input;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
return unixTimeNumberToDate(input);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.dateFromDateOrTimeNumber = dateFromDateOrTimeNumber;
|
|
29
|
+
function unixTimeNumberToDate(dateTimeNumber) {
|
|
30
|
+
return (dateTimeNumber != null) ? new Date(dateTimeNumber * 1000) : dateTimeNumber;
|
|
31
|
+
}
|
|
32
|
+
exports.unixTimeNumberToDate = unixTimeNumberToDate;
|
|
33
|
+
function unixTimeNumberForNow() {
|
|
34
|
+
return unixTimeNumberFromDate(new Date());
|
|
35
|
+
}
|
|
36
|
+
exports.unixTimeNumberForNow = unixTimeNumberForNow;
|
|
37
|
+
function unixTimeNumberFromDate(date) {
|
|
38
|
+
return (date != null) ? Math.ceil(date.getTime() / 1000) : date;
|
|
39
|
+
}
|
|
40
|
+
exports.unixTimeNumberFromDate = unixTimeNumberFromDate;
|
|
41
|
+
//# sourceMappingURL=date.unix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.unix.js","sourceRoot":"","sources":["../../../../../../packages/date/src/lib/date/date.unix.ts"],"names":[],"mappings":";;;AACA,uCAAkC;AAElC,SAAgB,kCAAkC,CAAC,KAAsC;IACvF,IAAI,KAAK,IAAI,IAAI,EAAE;QACjB,OAAO,KAAyB,CAAC;KAClC;SAAM,IAAI,IAAA,iBAAM,EAAC,KAAK,CAAC,EAAE;QACxB,OAAO,sBAAsB,CAAC,KAAa,CAAC,CAAC;KAC9C;SAAM;QACL,OAAO,KAA2B,CAAC;KACpC;AACH,CAAC;AARD,gFAQC;AAED,SAAgB,wBAAwB,CAAC,KAAsC;IAC7E,IAAI,KAAK,IAAI,IAAI,EAAE;QACjB,OAAO,KAAyB,CAAC;KAClC;SAAM,IAAI,IAAA,iBAAM,EAAC,KAAK,CAAC,EAAE;QACxB,OAAO,KAAa,CAAC;KACtB;SAAM;QACL,OAAO,oBAAoB,CAAC,KAA2B,CAAC,CAAC;KAC1D;AACH,CAAC;AARD,4DAQC;AAED,SAAgB,oBAAoB,CAAC,cAAyC;IAC5E,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,cAAkC,CAAC;AACzG,CAAC;AAFD,oDAEC;AAED,SAAgB,oBAAoB;IAClC,OAAO,sBAAsB,CAAC,IAAI,IAAI,EAAE,CAAE,CAAC;AAC7C,CAAC;AAFD,oDAEC;AAED,SAAgB,sBAAsB,CAAC,IAAiB;IACtD,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAwB,CAAC;AACtF,CAAC;AAFD,wDAEC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from './date.calendar';
|
|
2
|
+
export * from './date.duration';
|
|
3
|
+
export * from './date.format';
|
|
4
|
+
export * from './date.hashset';
|
|
5
|
+
export * from './date.range';
|
|
6
|
+
export * from './date.round';
|
|
7
|
+
export * from './date.sort';
|
|
8
|
+
export * from './date.time.limit';
|
|
9
|
+
export * from './date.time.minute';
|
|
10
|
+
export * from './date.time';
|
|
11
|
+
export * from './date.timezone';
|
|
12
|
+
export * from './date';
|
|
13
|
+
export * from './date.unix';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
(0, tslib_1.__exportStar)(require("./date.calendar"), exports);
|
|
5
|
+
(0, tslib_1.__exportStar)(require("./date.duration"), exports);
|
|
6
|
+
(0, tslib_1.__exportStar)(require("./date.format"), exports);
|
|
7
|
+
(0, tslib_1.__exportStar)(require("./date.hashset"), exports);
|
|
8
|
+
(0, tslib_1.__exportStar)(require("./date.range"), exports);
|
|
9
|
+
(0, tslib_1.__exportStar)(require("./date.round"), exports);
|
|
10
|
+
(0, tslib_1.__exportStar)(require("./date.sort"), exports);
|
|
11
|
+
(0, tslib_1.__exportStar)(require("./date.time.limit"), exports);
|
|
12
|
+
(0, tslib_1.__exportStar)(require("./date.time.minute"), exports);
|
|
13
|
+
(0, tslib_1.__exportStar)(require("./date.time"), exports);
|
|
14
|
+
(0, tslib_1.__exportStar)(require("./date.timezone"), exports);
|
|
15
|
+
(0, tslib_1.__exportStar)(require("./date"), exports);
|
|
16
|
+
(0, tslib_1.__exportStar)(require("./date.unix"), exports);
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/date/src/lib/date/index.ts"],"names":[],"mappings":";;;AAAA,+DAAgC;AAChC,+DAAgC;AAChC,6DAA8B;AAC9B,8DAA+B;AAC/B,4DAA6B;AAC7B,4DAA6B;AAC7B,2DAA4B;AAC5B,iEAAkC;AAClC,kEAAmC;AACnC,2DAA4B;AAC5B,+DAAgC;AAChC,sDAAuB;AACvB,2DAA4B"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ISO8601DateString } from '@dereekb/util';
|
|
2
|
+
import { DateRangeType } from './date';
|
|
3
|
+
export interface FindDateParamRequest {
|
|
4
|
+
before?: ISO8601DateString;
|
|
5
|
+
after?: ISO8601DateString;
|
|
6
|
+
}
|
|
7
|
+
export interface DateItemOccuringFilterRequest {
|
|
8
|
+
occuringAt?: ISO8601DateString;
|
|
9
|
+
}
|
|
10
|
+
export interface DateItemQueryStartsEndsFilterRequest extends DateItemOccuringFilterRequest {
|
|
11
|
+
startsBefore?: ISO8601DateString;
|
|
12
|
+
startsAfter?: ISO8601DateString;
|
|
13
|
+
endsBefore?: ISO8601DateString;
|
|
14
|
+
endsAfter?: ISO8601DateString;
|
|
15
|
+
}
|
|
16
|
+
export interface DateItemQueryStartsEndsWithRangeFilterRequest extends DateItemQueryStartsEndsFilterRequest {
|
|
17
|
+
rangeType?: DateRangeType;
|
|
18
|
+
rangeDate?: ISO8601DateString;
|
|
19
|
+
rangeDistance?: number;
|
|
20
|
+
rangeContained?: boolean;
|
|
21
|
+
timezone?: string;
|
|
22
|
+
}
|