@dereekb/date 0.0.1 → 1.2.0
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/CHANGELOG.md +23 -0
- package/README.md +4 -5
- package/package.json +11 -12
- package/src/lib/date/date.time.d.ts +10 -1
- package/src/lib/date/date.time.js +29 -18
- package/src/lib/date/date.time.js.map +1 -1
- package/src/lib/date/date.timezone.d.ts +64 -28
- package/src/lib/date/date.timezone.js +89 -43
- package/src/lib/date/date.timezone.js.map +1 -1
- package/src/lib/expires/expires.d.ts +11 -4
- package/src/lib/expires/expires.js +16 -9
- package/src/lib/expires/expires.js.map +1 -1
- package/src/lib/expires/expires.rxjs.d.ts +30 -0
- package/src/lib/expires/expires.rxjs.js +62 -0
- package/src/lib/expires/expires.rxjs.js.map +1 -0
- package/src/lib/expires/index.d.ts +1 -0
- package/src/lib/expires/index.js +1 -0
- package/src/lib/expires/index.js.map +1 -1
- package/src/lib/rrule/date.rrule.js +15 -10
- package/src/lib/rrule/date.rrule.js.map +1 -1
- package/src/lib/rrule/date.rrule.parse.d.ts +4 -2
- package/src/lib/rrule/date.rrule.parse.js +9 -5
- package/src/lib/rrule/date.rrule.parse.js.map +1 -1
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
|
+
|
|
5
|
+
# [1.2.0](https://github.com/dereekb/dbcomponents/compare/v1.1.0...v1.2.0) (2022-03-04)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
# [1.1.0](https://github.com/dereekb/dbcomponents/compare/v1.0.0...v1.1.0) (2022-03-02)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# 1.0.0 (2022-02-23)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Features
|
|
17
|
+
|
|
18
|
+
* added dbxSearchableTextFieldComponent ([42ae14c](https://github.com/dereekb/dbcomponents/commit/42ae14c7709f6603db676c94f1df2017fdad59ca))
|
|
19
|
+
* added dbxTextEditorFieldComponent ([9146403](https://github.com/dereekb/dbcomponents/commit/9146403e26e7647181f66435db3597f0f64853ec))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# 0.1.0 (2022-01-29)
|
package/README.md
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
@dereekb/date
|
|
2
|
+
=======
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
The sources for this package are in the main [@dereekb/dbcomponents](https://github.com/dereekb/dbcomponents) repo. Please file issues and pull requests against that repo.
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
Run `nx test date` to execute the unit tests via [Jest](https://jestjs.io).
|
|
6
|
+
License: MIT
|
package/package.json
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/date",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"type": "commonjs",
|
|
5
|
-
"peerDependencies": {
|
|
6
|
-
"date-fns": "2.28.0",
|
|
7
|
-
"date-fns-tz": "1.2.2",
|
|
8
|
-
"class-transformer": "0.5.1",
|
|
9
|
-
"class-validator": "0.13.2",
|
|
10
|
-
"reflect-metadata": "0.1.13",
|
|
11
|
-
"rrule": "2.6.8"
|
|
12
|
-
},
|
|
13
5
|
"main": "./src/index.js",
|
|
14
6
|
"typings": "./src/index.d.ts",
|
|
15
7
|
"dependencies": {
|
|
16
|
-
"@dereekb/util": "
|
|
17
|
-
"extra-set": "^2.2.11"
|
|
18
|
-
|
|
8
|
+
"@dereekb/util": "1.2.0",
|
|
9
|
+
"extra-set": "^2.2.11",
|
|
10
|
+
"class-transformer": "^0.5.1",
|
|
11
|
+
"date-fns": "^2.28.0",
|
|
12
|
+
"class-validator": "^0.13.2",
|
|
13
|
+
"date-fns-tz": "^1.2.2",
|
|
14
|
+
"rxjs": "^7.5.2",
|
|
15
|
+
"rrule": "git+https://git@github.com/dereekb/rrule.git#17adf5708d6567b4d01a3a8afd106261421ea492"
|
|
16
|
+
},
|
|
17
|
+
"peerDependencies": {}
|
|
19
18
|
}
|
|
@@ -11,7 +11,7 @@ export interface ParsedTimeString {
|
|
|
11
11
|
*/
|
|
12
12
|
date: Date;
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
14
|
+
* The minute in the day.
|
|
15
15
|
*/
|
|
16
16
|
minutesSinceStartOfDay: number;
|
|
17
17
|
/**
|
|
@@ -77,6 +77,15 @@ export declare function dateTimeInstanceUtc(): DateTimeUtilityInstance;
|
|
|
77
77
|
export declare function dateTimeInstance(timezone?: Maybe<TimezoneString>): DateTimeUtilityInstance;
|
|
78
78
|
export declare function getTimeAM(date?: Date, timezone?: Maybe<TimezoneString>): TimeAM;
|
|
79
79
|
export declare function toReadableTimeString(date: Date, timezone?: Maybe<TimezoneString>): ReadableTimeString;
|
|
80
|
+
/**
|
|
81
|
+
* Parses the input string relative to the timezone in the configuration.
|
|
82
|
+
*
|
|
83
|
+
* If no conversion timezone is provided, then it is parsed relative to UTC.
|
|
84
|
+
*
|
|
85
|
+
* @param input
|
|
86
|
+
* @param config
|
|
87
|
+
* @returns
|
|
88
|
+
*/
|
|
80
89
|
export declare function parseReadableTimeString(input: ReadableTimeString, config?: ParseTimeString): Maybe<ParsedTimeString>;
|
|
81
90
|
export declare function readableTimeStringToDate(input: ReadableTimeString, config?: ParseTimeString): Maybe<Date>;
|
|
82
91
|
export declare function limitDateTime(config: LimitDateTimeConfig): LimitDateTimeInstance;
|
|
@@ -75,11 +75,12 @@ class DateTimeUtilityInstance {
|
|
|
75
75
|
input = input.trim();
|
|
76
76
|
}
|
|
77
77
|
/*
|
|
78
|
-
The input date needs to capture the right Day we want to parse on.
|
|
78
|
+
The input date needs to capture the right Day we want to parse on, since parse uses the system's information for hours/date information.
|
|
79
79
|
We do this by adding the offset of the system with the offset of the target timezone.
|
|
80
80
|
*/
|
|
81
81
|
const relativeDateNormal = new date_timezone_1.DateTimezoneUtcNormalInstance(config);
|
|
82
|
-
const relativeDate = relativeDateNormal.
|
|
82
|
+
const relativeDate = relativeDateNormal.systemDateToTargetDate(inputDate);
|
|
83
|
+
// console.log('Relative Date: ', relativeDate, calculateAllConversions(inputDate, relativeDateNormal, (x) => millisecondsToHours(x)));
|
|
83
84
|
const formats = [
|
|
84
85
|
'h:mma',
|
|
85
86
|
'h:mm a',
|
|
@@ -87,12 +88,12 @@ class DateTimeUtilityInstance {
|
|
|
87
88
|
'ha',
|
|
88
89
|
'h:mm' // 1:20
|
|
89
90
|
];
|
|
90
|
-
let
|
|
91
|
+
let systemParsedDateTime;
|
|
91
92
|
let valid = false;
|
|
92
93
|
// tslint:disable-next-line: prefer-for-of
|
|
93
94
|
for (let i = 0; i < formats.length; i += 1) {
|
|
94
|
-
|
|
95
|
-
if ((0, date_fns_1.isValid)(
|
|
95
|
+
systemParsedDateTime = (0, date_fns_1.parse)(input, formats[i], relativeDate);
|
|
96
|
+
if ((0, date_fns_1.isValid)(systemParsedDateTime)) {
|
|
96
97
|
valid = true;
|
|
97
98
|
break; // Use time.
|
|
98
99
|
}
|
|
@@ -118,16 +119,16 @@ class DateTimeUtilityInstance {
|
|
|
118
119
|
case 1:
|
|
119
120
|
case 2:
|
|
120
121
|
// 1
|
|
121
|
-
|
|
122
|
+
systemParsedDateTime = (0, date_fns_1.parse)(input, 'H', relativeDate);
|
|
122
123
|
break;
|
|
123
124
|
case 5:
|
|
124
125
|
// 120AM
|
|
125
126
|
input = removeAmPm(input);
|
|
126
|
-
|
|
127
|
+
systemParsedDateTime = parseDateTimeFromNumber(input);
|
|
127
128
|
break;
|
|
128
129
|
case 3:
|
|
129
130
|
// 120
|
|
130
|
-
|
|
131
|
+
systemParsedDateTime = parseDateTimeFromNumber(input);
|
|
131
132
|
break;
|
|
132
133
|
case 6:
|
|
133
134
|
// 1212AM
|
|
@@ -135,31 +136,32 @@ class DateTimeUtilityInstance {
|
|
|
135
136
|
if (removedPm) {
|
|
136
137
|
removedPm = input[0] !== '2'; // If 2, ignore the PM part.
|
|
137
138
|
}
|
|
138
|
-
|
|
139
|
+
systemParsedDateTime = parseDateTimeAsHmm(input);
|
|
139
140
|
break;
|
|
140
141
|
default:
|
|
141
142
|
// 2200
|
|
142
|
-
|
|
143
|
+
systemParsedDateTime = parseDateTimeAsHmm(input);
|
|
143
144
|
break;
|
|
144
145
|
}
|
|
145
146
|
if (removedPm) {
|
|
146
|
-
|
|
147
|
+
systemParsedDateTime = (0, date_fns_1.addHours)(systemParsedDateTime, 12);
|
|
147
148
|
}
|
|
148
|
-
valid = (0, date_fns_1.isValid)(
|
|
149
|
+
valid = (0, date_fns_1.isValid)(systemParsedDateTime);
|
|
149
150
|
}
|
|
150
|
-
// console.log('Parsed: ', input, inputDate,
|
|
151
|
+
// console.log('Parsed: ', systemParsedDateTime, relativeDate, input, inputDate, relativeDateNormal);
|
|
151
152
|
// Raw parse result is always UTC for that date.
|
|
152
153
|
// For example, 1AM will return 1AM UTC in a Date object.
|
|
153
154
|
let raw;
|
|
155
|
+
let result;
|
|
154
156
|
if (valid) {
|
|
155
157
|
// The parsed DateTime will be in the system settings for that date in as a UTC time.
|
|
156
|
-
raw =
|
|
157
|
-
|
|
158
|
-
// console.log('Raw: ', input, raw,
|
|
158
|
+
raw = relativeDateNormal.baseDateToSystemDate(systemParsedDateTime);
|
|
159
|
+
result = relativeDateNormal.targetDateToSystemDate(systemParsedDateTime);
|
|
160
|
+
// console.log('Raw: ', input, systemParsedDateTime, differenceInHours(raw, systemParsedDateTime!), raw, differenceInHours(raw, result), result, this.normalInstance.config);
|
|
159
161
|
}
|
|
160
162
|
return {
|
|
161
|
-
raw
|
|
162
|
-
result
|
|
163
|
+
raw,
|
|
164
|
+
result,
|
|
163
165
|
valid
|
|
164
166
|
};
|
|
165
167
|
}
|
|
@@ -192,6 +194,15 @@ function toReadableTimeString(date, timezone) {
|
|
|
192
194
|
return dateTimeInstance(timezone).toTimeString(date);
|
|
193
195
|
}
|
|
194
196
|
exports.toReadableTimeString = toReadableTimeString;
|
|
197
|
+
/**
|
|
198
|
+
* Parses the input string relative to the timezone in the configuration.
|
|
199
|
+
*
|
|
200
|
+
* If no conversion timezone is provided, then it is parsed relative to UTC.
|
|
201
|
+
*
|
|
202
|
+
* @param input
|
|
203
|
+
* @param config
|
|
204
|
+
* @returns
|
|
205
|
+
*/
|
|
195
206
|
function parseReadableTimeString(input, config) {
|
|
196
207
|
return dateTimeInstance(config === null || config === void 0 ? void 0 : config.timezone).parseTimeString(input, config);
|
|
197
208
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.time.js","sourceRoot":"","sources":["../../../../../../packages/date/src/lib/date/date.time.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"date.time.js","sourceRoot":"","sources":["../../../../../../packages/date/src/lib/date/date.time.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Maybe, TimezoneString } from '@dereekb/util';
|
|
1
|
+
import { Maybe, Milliseconds, TimezoneString } from '@dereekb/util';
|
|
2
2
|
/**
|
|
3
3
|
* Inherited from the RRule library where RRule only deals with UTC date/times, dates going into it must always be in UTC.
|
|
4
4
|
*
|
|
@@ -10,12 +10,6 @@ import { Maybe, TimezoneString } from '@dereekb/util';
|
|
|
10
10
|
* When using base dates, we can target any timezone after performing date conversions without worrying about things such as daylight savings, etc.
|
|
11
11
|
*/
|
|
12
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
13
|
export interface DateTimezoneConversionConfig {
|
|
20
14
|
/**
|
|
21
15
|
* Timezone to be relative to. If not defined, values are returned in UTC.
|
|
@@ -24,13 +18,16 @@ export interface DateTimezoneConversionConfig {
|
|
|
24
18
|
/**
|
|
25
19
|
* Whether or not to use the system timezone/offset.
|
|
26
20
|
*
|
|
27
|
-
* This will convert between UTC and the system timezone.
|
|
21
|
+
* This will convert between UTC and the current system's timezone.
|
|
28
22
|
*/
|
|
29
23
|
useSystemTimezone?: boolean;
|
|
30
24
|
/**
|
|
31
|
-
* Custom timezone offset
|
|
25
|
+
* Custom timezone offset (in ms) between the "normal" and the base date.
|
|
26
|
+
*
|
|
27
|
+
* Examples:
|
|
28
|
+
* - UTC-6 is negative 6 hours, in milliseconds.
|
|
32
29
|
*/
|
|
33
|
-
timezoneOffset?:
|
|
30
|
+
timezoneOffset?: Milliseconds;
|
|
34
31
|
}
|
|
35
32
|
/**
|
|
36
33
|
* Returns true if both inputs are considered equivalent.
|
|
@@ -40,16 +37,54 @@ export interface DateTimezoneConversionConfig {
|
|
|
40
37
|
* @returns
|
|
41
38
|
*/
|
|
42
39
|
export declare function isSameDateTimezoneConversionConfig(a: DateTimezoneConversionConfig, b: DateTimezoneConversionConfig): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Returns the current offset in milliseconds.
|
|
42
|
+
*
|
|
43
|
+
* The offset corresponds positively with the UTC offset, so UTC-6 is negative 6 hours, in milliseconds.
|
|
44
|
+
*
|
|
45
|
+
* @param date Date is required to get the correct offset for the given date.
|
|
46
|
+
* @returns
|
|
47
|
+
*/
|
|
43
48
|
export declare function getCurrentSystemOffsetInMs(date: Date): number;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
export declare type DateTimezoneConversionTarget = 'target' | 'base' | 'system';
|
|
50
|
+
export declare type DateTimezoneOffsetFunction = (date: Date, from: DateTimezoneConversionTarget, to: DateTimezoneConversionTarget) => Milliseconds;
|
|
51
|
+
export interface DateTimezoneBaseDateConverter {
|
|
52
|
+
getCurrentOffset: DateTimezoneOffsetFunction;
|
|
53
|
+
/**
|
|
54
|
+
* Converts the given date into a date relative to the UTC's date by
|
|
55
|
+
* adding the timezone offset for the current timezone.
|
|
56
|
+
*
|
|
57
|
+
* This is generally used for cases where you are dealing with conversational strings, such as "2AM today". By using the base UTC date,
|
|
58
|
+
* as 2PM we can get "2PM" in UTC, then convert back using baseDateToTargetDate avoid timezone conversion issues and other headaches.
|
|
59
|
+
*
|
|
60
|
+
* For example, if it is 2PM in the input time, the resulting time will be 2PM UTC.
|
|
61
|
+
* - Input: 2021-08-16T14:00:00.000-06:00
|
|
62
|
+
* - Output: 2021-08-16T14:00:00.000Z
|
|
63
|
+
*
|
|
64
|
+
* @param date
|
|
65
|
+
* @param addOffset
|
|
66
|
+
*/
|
|
67
|
+
targetDateToBaseDate(date: Date): Date;
|
|
68
|
+
/**
|
|
69
|
+
* Converts the given date into a date relative to the system's date.
|
|
70
|
+
*
|
|
71
|
+
* This is available for cases where the system uses Date's internal functionality (and therefore the system's timezone),
|
|
72
|
+
* and conversions need to be done to/from the system time to the target timezone.
|
|
73
|
+
*
|
|
74
|
+
* For example, if it is 2PM in the input time, the resulting time will be 2PM in the current system time.
|
|
75
|
+
* - Input: 2021-08-16T14:00:00.000-06:00
|
|
76
|
+
* - Output: 2021-08-16T14:00:00.000+02:00
|
|
77
|
+
*
|
|
78
|
+
* @param date
|
|
79
|
+
* @param addOffset
|
|
80
|
+
*/
|
|
81
|
+
targetDateToSystemDate(date: Date): Date;
|
|
82
|
+
baseDateToTargetDate(date: Date): Date;
|
|
83
|
+
baseDateToSystemDate(date: Date): Date;
|
|
84
|
+
systemDateToTargetDate(date: Date): Date;
|
|
85
|
+
systemDateToBaseDate(date: Date): Date;
|
|
52
86
|
}
|
|
87
|
+
export declare function calculateAllConversions(date: Date, converter: DateTimezoneBaseDateConverter, map?: (time: Milliseconds) => number): any;
|
|
53
88
|
/**
|
|
54
89
|
* Used for converting Dates to/from a UTC "base date" to a "normal date".
|
|
55
90
|
*
|
|
@@ -58,17 +93,18 @@ export interface DateTimezoneBaseDateConverter extends InternalDateTimezoneBaseD
|
|
|
58
93
|
export declare class DateTimezoneUtcNormalInstance implements DateTimezoneBaseDateConverter {
|
|
59
94
|
readonly config: DateTimezoneConversionConfig;
|
|
60
95
|
readonly hasConversion: boolean;
|
|
61
|
-
private readonly
|
|
96
|
+
private readonly _getOffset;
|
|
62
97
|
constructor(config: Maybe<TimezoneString> | DateTimezoneConversionConfig);
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
98
|
+
private _computeOffsetDate;
|
|
99
|
+
getCurrentOffset(date: Date, from: DateTimezoneConversionTarget, to: DateTimezoneConversionTarget): number;
|
|
100
|
+
targetDateToBaseDate(date: Date): Date;
|
|
101
|
+
baseDateToTargetDate(date: Date): Date;
|
|
102
|
+
baseDateToSystemDate(date: Date): Date;
|
|
103
|
+
systemDateToBaseDate(date: Date): Date;
|
|
104
|
+
targetDateToSystemDate(date: Date): Date;
|
|
105
|
+
systemDateToTargetDate(date: Date): Date;
|
|
69
106
|
}
|
|
70
|
-
export declare function
|
|
71
|
-
export declare function
|
|
107
|
+
export declare function baseDateToTargetDate(date: Date, timezone: Maybe<TimezoneString>): Date;
|
|
108
|
+
export declare function targetDateToBaseDate(date: Date, timezone: Maybe<TimezoneString>): Date;
|
|
72
109
|
export declare function systemBaseDateToNormalDate(date: Date): Date;
|
|
73
110
|
export declare function systemNormalDateToBaseDate(date: Date): Date;
|
|
74
|
-
export {};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.systemNormalDateToBaseDate = exports.systemBaseDateToNormalDate = exports.
|
|
4
|
-
const util_1 = require("@dereekb/util");
|
|
3
|
+
exports.systemNormalDateToBaseDate = exports.systemBaseDateToNormalDate = exports.targetDateToBaseDate = exports.baseDateToTargetDate = exports.DateTimezoneUtcNormalInstance = exports.calculateAllConversions = exports.getCurrentSystemOffsetInMs = exports.isSameDateTimezoneConversionConfig = void 0;
|
|
5
4
|
const date_fns_1 = require("date-fns");
|
|
5
|
+
const util_1 = require("@dereekb/util");
|
|
6
6
|
const date_fns_tz_1 = require("date-fns-tz");
|
|
7
7
|
const date_1 = require("./date");
|
|
8
8
|
/**
|
|
@@ -23,10 +23,31 @@ function isSameDateTimezoneConversionConfig(a, b) {
|
|
|
23
23
|
return isSame;
|
|
24
24
|
}
|
|
25
25
|
exports.isSameDateTimezoneConversionConfig = isSameDateTimezoneConversionConfig;
|
|
26
|
+
/**
|
|
27
|
+
* Returns the current offset in milliseconds.
|
|
28
|
+
*
|
|
29
|
+
* The offset corresponds positively with the UTC offset, so UTC-6 is negative 6 hours, in milliseconds.
|
|
30
|
+
*
|
|
31
|
+
* @param date Date is required to get the correct offset for the given date.
|
|
32
|
+
* @returns
|
|
33
|
+
*/
|
|
26
34
|
function getCurrentSystemOffsetInMs(date) {
|
|
27
|
-
return (0, date_1.minutesToMs)(date.getTimezoneOffset());
|
|
35
|
+
return -(0, date_1.minutesToMs)(date.getTimezoneOffset());
|
|
28
36
|
}
|
|
29
37
|
exports.getCurrentSystemOffsetInMs = getCurrentSystemOffsetInMs;
|
|
38
|
+
function calculateAllConversions(date, converter, map = (x) => x) {
|
|
39
|
+
const options = ['target', 'base', 'system'];
|
|
40
|
+
const conversions = {};
|
|
41
|
+
options.forEach((from) => {
|
|
42
|
+
options.forEach((to) => {
|
|
43
|
+
if (from !== to) {
|
|
44
|
+
conversions[`${from}-${to}`] = map(converter.getCurrentOffset(date, from, to));
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
return conversions;
|
|
49
|
+
}
|
|
50
|
+
exports.calculateAllConversions = calculateAllConversions;
|
|
30
51
|
/**
|
|
31
52
|
* Used for converting Dates to/from a UTC "base date" to a "normal date".
|
|
32
53
|
*
|
|
@@ -58,69 +79,94 @@ class DateTimezoneUtcNormalInstance {
|
|
|
58
79
|
}
|
|
59
80
|
const hasConversion = Boolean(getOffsetInMsFn);
|
|
60
81
|
if (hasConversion) {
|
|
61
|
-
function calculateOffset(date,
|
|
62
|
-
const offset =
|
|
63
|
-
|
|
64
|
-
|
|
82
|
+
function calculateOffset(date, fn = getOffsetInMsFn) {
|
|
83
|
+
const offset = fn(date);
|
|
84
|
+
return offset;
|
|
85
|
+
}
|
|
86
|
+
function calculateSystemNormalDifference(date) {
|
|
87
|
+
const normalOffset = calculateOffset(date);
|
|
88
|
+
const systemOffset = getCurrentSystemOffsetInMs(date);
|
|
89
|
+
return -normalOffset + systemOffset;
|
|
65
90
|
}
|
|
66
|
-
this.
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
91
|
+
this._getOffset = function getCurrentOffset(x, from, to) {
|
|
92
|
+
if (from === to) {
|
|
93
|
+
return 0;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
const target = `${from}-${to}`;
|
|
97
|
+
let offset;
|
|
98
|
+
switch (target) {
|
|
99
|
+
case 'target-base':
|
|
100
|
+
offset = -calculateOffset(x);
|
|
101
|
+
break;
|
|
102
|
+
case 'base-target':
|
|
103
|
+
offset = calculateOffset(x);
|
|
104
|
+
break;
|
|
105
|
+
case 'target-system':
|
|
106
|
+
offset = calculateSystemNormalDifference(x);
|
|
107
|
+
break;
|
|
108
|
+
case 'system-target':
|
|
109
|
+
offset = -calculateSystemNormalDifference(x);
|
|
110
|
+
break;
|
|
111
|
+
case 'base-system':
|
|
112
|
+
offset = getCurrentSystemOffsetInMs(x);
|
|
113
|
+
break;
|
|
114
|
+
case 'system-base':
|
|
115
|
+
offset = -getCurrentSystemOffsetInMs(x);
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
return offset;
|
|
73
119
|
}
|
|
74
120
|
};
|
|
75
121
|
}
|
|
76
122
|
else {
|
|
77
|
-
this.
|
|
78
|
-
getCurrentOffset: () => 0,
|
|
79
|
-
baseDateToNormalDate: (x) => x,
|
|
80
|
-
normalDateToBaseDate: (x) => x
|
|
81
|
-
};
|
|
123
|
+
this._getOffset = () => 0;
|
|
82
124
|
}
|
|
83
125
|
this.hasConversion = hasConversion;
|
|
84
126
|
}
|
|
127
|
+
_computeOffsetDate(date, from, to) {
|
|
128
|
+
return (0, date_fns_1.addMilliseconds)(date, this._getOffset(date, from, to));
|
|
129
|
+
}
|
|
85
130
|
// MARK: DateTimezoneBaseDateConverter
|
|
86
|
-
getCurrentOffset(date) {
|
|
87
|
-
return this.
|
|
131
|
+
getCurrentOffset(date, from, to) {
|
|
132
|
+
return this._getOffset(date, from, to);
|
|
88
133
|
}
|
|
89
|
-
|
|
90
|
-
return this.
|
|
134
|
+
targetDateToBaseDate(date) {
|
|
135
|
+
return this._computeOffsetDate(date, 'target', 'base');
|
|
91
136
|
}
|
|
92
|
-
|
|
93
|
-
return this.
|
|
137
|
+
baseDateToTargetDate(date) {
|
|
138
|
+
return this._computeOffsetDate(date, 'base', 'target');
|
|
94
139
|
}
|
|
95
|
-
|
|
96
|
-
return this.
|
|
140
|
+
baseDateToSystemDate(date) {
|
|
141
|
+
return this._computeOffsetDate(date, 'base', 'system');
|
|
97
142
|
}
|
|
98
|
-
|
|
99
|
-
return this.
|
|
143
|
+
systemDateToBaseDate(date) {
|
|
144
|
+
return this._computeOffsetDate(date, 'system', 'base');
|
|
100
145
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
return add;
|
|
146
|
+
targetDateToSystemDate(date) {
|
|
147
|
+
return this._computeOffsetDate(date, 'target', 'system');
|
|
148
|
+
}
|
|
149
|
+
systemDateToTargetDate(date) {
|
|
150
|
+
return this._computeOffsetDate(date, 'system', 'target');
|
|
107
151
|
}
|
|
108
152
|
}
|
|
109
153
|
exports.DateTimezoneUtcNormalInstance = DateTimezoneUtcNormalInstance;
|
|
110
|
-
function
|
|
111
|
-
|
|
154
|
+
function baseDateToTargetDate(date, timezone) {
|
|
155
|
+
const instance = new DateTimezoneUtcNormalInstance(timezone);
|
|
156
|
+
const result = instance.baseDateToTargetDate(date);
|
|
157
|
+
return result;
|
|
112
158
|
}
|
|
113
|
-
exports.
|
|
114
|
-
function
|
|
115
|
-
return new DateTimezoneUtcNormalInstance(timezone).
|
|
159
|
+
exports.baseDateToTargetDate = baseDateToTargetDate;
|
|
160
|
+
function targetDateToBaseDate(date, timezone) {
|
|
161
|
+
return new DateTimezoneUtcNormalInstance(timezone).targetDateToBaseDate(date);
|
|
116
162
|
}
|
|
117
|
-
exports.
|
|
163
|
+
exports.targetDateToBaseDate = targetDateToBaseDate;
|
|
118
164
|
function systemBaseDateToNormalDate(date) {
|
|
119
|
-
return new DateTimezoneUtcNormalInstance({ useSystemTimezone: true }).
|
|
165
|
+
return new DateTimezoneUtcNormalInstance({ useSystemTimezone: true }).baseDateToTargetDate(date);
|
|
120
166
|
}
|
|
121
167
|
exports.systemBaseDateToNormalDate = systemBaseDateToNormalDate;
|
|
122
168
|
function systemNormalDateToBaseDate(date) {
|
|
123
|
-
return new DateTimezoneUtcNormalInstance({ useSystemTimezone: true }).
|
|
169
|
+
return new DateTimezoneUtcNormalInstance({ useSystemTimezone: true }).targetDateToBaseDate(date);
|
|
124
170
|
}
|
|
125
171
|
exports.systemNormalDateToBaseDate = systemNormalDateToBaseDate;
|
|
126
172
|
//# sourceMappingURL=date.timezone.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.timezone.js","sourceRoot":"","sources":["../../../../../../packages/date/src/lib/date/date.timezone.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"date.timezone.js","sourceRoot":"","sources":["../../../../../../packages/date/src/lib/date/date.timezone.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DateOrUnixDateTimeNumber, Maybe } from '@dereekb/util';
|
|
2
2
|
/**
|
|
3
3
|
* An object that can expire.
|
|
4
4
|
*/
|
|
@@ -20,15 +20,22 @@ export declare function atleastOneNotExpired(expires: Maybe<Expires>[]): boolean
|
|
|
20
20
|
* If the list is empty, returns the second argument, or true by default.
|
|
21
21
|
*/
|
|
22
22
|
export declare function anyHaveExpired(expires: Maybe<Expires>[], expireIfEmpty?: boolean): boolean;
|
|
23
|
-
export declare function timeNumberHasExpired(timeNumber: UnixDateTimeNumber, expiresIn?: number): boolean;
|
|
24
23
|
/**
|
|
25
|
-
*
|
|
24
|
+
* Convenience function for checking if the input time has expired.
|
|
25
|
+
*
|
|
26
|
+
* @param timeNumber
|
|
27
|
+
* @param expiresIn
|
|
28
|
+
* @returns
|
|
29
|
+
*/
|
|
30
|
+
export declare function timeHasExpired(time: Maybe<DateOrUnixDateTimeNumber>, expiresIn?: number): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Creates an Expires object from the input date or time number.
|
|
26
33
|
*
|
|
27
34
|
* @param timeNumber Number to convert to a date.
|
|
28
35
|
* @param expiresIn If the input number is the initial date, and not the
|
|
29
36
|
* expiration date, this is used to find the expiresAt time.
|
|
30
37
|
*/
|
|
31
|
-
export declare function
|
|
38
|
+
export declare function toExpires(time: Maybe<DateOrUnixDateTimeNumber>, expiresIn?: number): Expires;
|
|
32
39
|
/**
|
|
33
40
|
* Checks whether or not the item has expired. If no expiration date is set, it is considered expired.
|
|
34
41
|
*/
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getExpiration = exports.hasExpired = exports.
|
|
4
|
-
const
|
|
3
|
+
exports.getExpiration = exports.hasExpired = exports.toExpires = exports.timeHasExpired = exports.anyHaveExpired = exports.atleastOneNotExpired = void 0;
|
|
4
|
+
const date_unix_1 = require("../date/date.unix");
|
|
5
5
|
const date_fns_1 = require("date-fns");
|
|
6
6
|
/**
|
|
7
7
|
* Returns true if any of the input items have expired.
|
|
@@ -34,19 +34,26 @@ function anyHaveExpired(expires, expireIfEmpty = true) {
|
|
|
34
34
|
return false;
|
|
35
35
|
}
|
|
36
36
|
exports.anyHaveExpired = anyHaveExpired;
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Convenience function for checking if the input time has expired.
|
|
39
|
+
*
|
|
40
|
+
* @param timeNumber
|
|
41
|
+
* @param expiresIn
|
|
42
|
+
* @returns
|
|
43
|
+
*/
|
|
44
|
+
function timeHasExpired(time, expiresIn) {
|
|
45
|
+
return hasExpired(toExpires(time, expiresIn));
|
|
39
46
|
}
|
|
40
|
-
exports.
|
|
47
|
+
exports.timeHasExpired = timeHasExpired;
|
|
41
48
|
/**
|
|
42
|
-
* Creates an Expires object from the input time number.
|
|
49
|
+
* Creates an Expires object from the input date or time number.
|
|
43
50
|
*
|
|
44
51
|
* @param timeNumber Number to convert to a date.
|
|
45
52
|
* @param expiresIn If the input number is the initial date, and not the
|
|
46
53
|
* expiration date, this is used to find the expiresAt time.
|
|
47
54
|
*/
|
|
48
|
-
function
|
|
49
|
-
let expiresAt = (0,
|
|
55
|
+
function toExpires(time, expiresIn) {
|
|
56
|
+
let expiresAt = (0, date_unix_1.dateFromDateOrTimeNumber)(time);
|
|
50
57
|
if (expiresAt && expiresIn) {
|
|
51
58
|
expiresAt = (0, date_fns_1.addMilliseconds)(expiresAt, expiresIn);
|
|
52
59
|
}
|
|
@@ -54,7 +61,7 @@ function timeNumberToExpires(timeNumber, expiresIn) {
|
|
|
54
61
|
expiresAt
|
|
55
62
|
};
|
|
56
63
|
}
|
|
57
|
-
exports.
|
|
64
|
+
exports.toExpires = toExpires;
|
|
58
65
|
/**
|
|
59
66
|
* Checks whether or not the item has expired. If no expiration date is set, it is considered expired.
|
|
60
67
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expires.js","sourceRoot":"","sources":["../../../../../../packages/date/src/lib/expires/expires.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"expires.js","sourceRoot":"","sources":["../../../../../../packages/date/src/lib/expires/expires.ts"],"names":[],"mappings":";;;AAAA,iDAA6D;AAE7D,uCAA+D;AAY/D;;;;GAIG;AACH,SAAgB,oBAAoB,CAAC,OAAyB;IAC5D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;YACvB,OAAO,IAAI,CAAC;SACb;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AARD,oDAQC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAAC,OAAyB,EAAE,aAAa,GAAG,IAAI;IAC5E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACxB,OAAO,aAAa,CAAC;KACtB;IAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE;YACtB,OAAO,IAAI,CAAC;SACb;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAZD,wCAYC;AAED;;;;;;GAMG;AACH,SAAgB,cAAc,CAAC,IAAqC,EAAE,SAAkB;IACtF,OAAO,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;AAChD,CAAC;AAFD,wCAEC;AAED;;;;;;GAMG;AACH,SAAgB,SAAS,CAAC,IAAqC,EAAE,SAAkB;IACjF,IAAI,SAAS,GAAG,IAAA,oCAAwB,EAAC,IAAI,CAAC,CAAC;IAE/C,IAAI,SAAS,IAAI,SAAS,EAAE;QAC1B,SAAS,GAAG,IAAA,0BAAe,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC;KACnD;IAED,OAAO;QACL,SAAS;KACV,CAAC;AACJ,CAAC;AAVD,8BAUC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,OAAuB;IAChD,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,IAAA,iBAAM,EAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;AAHD,gCAGC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,OAAuB;;IACnD,OAAO,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,mCAAI,IAAA,qBAAU,EAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAFD,sCAEC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Milliseconds, DateOrUnixDateTimeNumber } from "@dereekb/util";
|
|
2
|
+
import { MonoTypeOperatorFunction, Observable, OperatorFunction } from "rxjs";
|
|
3
|
+
import { Expires } from "./expires";
|
|
4
|
+
/**
|
|
5
|
+
* Creates a new Expires object at the current time on emission that will expire in the set amount of time.
|
|
6
|
+
*
|
|
7
|
+
* @param expiresIn
|
|
8
|
+
* @returns
|
|
9
|
+
*/
|
|
10
|
+
export declare function toExpiration<T>(expiresIn: number): OperatorFunction<T, Expires>;
|
|
11
|
+
/**
|
|
12
|
+
* Filters further emissions once the input is expired.
|
|
13
|
+
*/
|
|
14
|
+
export declare function skipExpired<T extends Expires>(): MonoTypeOperatorFunction<T>;
|
|
15
|
+
/**
|
|
16
|
+
* Skips the input date or timenumber until expiration occurs.
|
|
17
|
+
*/
|
|
18
|
+
export declare function skipUntilExpiration(expiresIn?: number): MonoTypeOperatorFunction<DateOrUnixDateTimeNumber>;
|
|
19
|
+
/**
|
|
20
|
+
* Skips the input date or timenumber after expiration occurs.
|
|
21
|
+
*/
|
|
22
|
+
export declare function skipAfterExpiration(expiresIn?: number): MonoTypeOperatorFunction<DateOrUnixDateTimeNumber>;
|
|
23
|
+
/**
|
|
24
|
+
* Skips emissions until time since the last emission from the watch observable has elapsed.
|
|
25
|
+
*/
|
|
26
|
+
export declare function skipUntilTimeElapsedAfterLastEmission<T>(watch: Observable<any>, takeFor: Milliseconds): MonoTypeOperatorFunction<T>;
|
|
27
|
+
/**
|
|
28
|
+
* Takes emissions until time since the last emission from the watch observable has elapsed.
|
|
29
|
+
*/
|
|
30
|
+
export declare function takeAfterTimeElapsedSinceLastEmission<T>(watch: Observable<any>, skipFor: Milliseconds): MonoTypeOperatorFunction<T>;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.takeAfterTimeElapsedSinceLastEmission = exports.skipUntilTimeElapsedAfterLastEmission = exports.skipAfterExpiration = exports.skipUntilExpiration = exports.skipExpired = exports.toExpiration = void 0;
|
|
4
|
+
const date_1 = require("@dereekb/date");
|
|
5
|
+
const rxjs_1 = require("rxjs");
|
|
6
|
+
const expires_1 = require("./expires");
|
|
7
|
+
/**
|
|
8
|
+
* Creates a new Expires object at the current time on emission that will expire in the set amount of time.
|
|
9
|
+
*
|
|
10
|
+
* @param expiresIn
|
|
11
|
+
* @returns
|
|
12
|
+
*/
|
|
13
|
+
function toExpiration(expiresIn) {
|
|
14
|
+
return (0, rxjs_1.map)(_ => (0, expires_1.toExpires)(new Date(), expiresIn));
|
|
15
|
+
}
|
|
16
|
+
exports.toExpiration = toExpiration;
|
|
17
|
+
/**
|
|
18
|
+
* Filters further emissions once the input is expired.
|
|
19
|
+
*/
|
|
20
|
+
function skipExpired() {
|
|
21
|
+
return (0, rxjs_1.filter)(expires => !(0, expires_1.hasExpired)(expires));
|
|
22
|
+
}
|
|
23
|
+
exports.skipExpired = skipExpired;
|
|
24
|
+
/**
|
|
25
|
+
* Skips the input date or timenumber until expiration occurs.
|
|
26
|
+
*/
|
|
27
|
+
function skipUntilExpiration(expiresIn) {
|
|
28
|
+
return (0, rxjs_1.filter)(x => (0, date_1.timeHasExpired)(x, expiresIn));
|
|
29
|
+
}
|
|
30
|
+
exports.skipUntilExpiration = skipUntilExpiration;
|
|
31
|
+
/**
|
|
32
|
+
* Skips the input date or timenumber after expiration occurs.
|
|
33
|
+
*/
|
|
34
|
+
function skipAfterExpiration(expiresIn) {
|
|
35
|
+
return (0, rxjs_1.filter)(x => !(0, date_1.timeHasExpired)(x, expiresIn));
|
|
36
|
+
}
|
|
37
|
+
exports.skipAfterExpiration = skipAfterExpiration;
|
|
38
|
+
/**
|
|
39
|
+
* Skips emissions until time since the last emission from the watch observable has elapsed.
|
|
40
|
+
*/
|
|
41
|
+
function skipUntilTimeElapsedAfterLastEmission(watch, takeFor) {
|
|
42
|
+
return (observable) => {
|
|
43
|
+
return watch.pipe((0, rxjs_1.switchMap)(() => {
|
|
44
|
+
const expires = (0, expires_1.toExpires)(new Date(), takeFor);
|
|
45
|
+
return observable.pipe((0, rxjs_1.takeWhile)(_ => !(0, expires_1.hasExpired)(expires)));
|
|
46
|
+
}));
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
exports.skipUntilTimeElapsedAfterLastEmission = skipUntilTimeElapsedAfterLastEmission;
|
|
50
|
+
/**
|
|
51
|
+
* Takes emissions until time since the last emission from the watch observable has elapsed.
|
|
52
|
+
*/
|
|
53
|
+
function takeAfterTimeElapsedSinceLastEmission(watch, skipFor) {
|
|
54
|
+
return (observable) => {
|
|
55
|
+
return watch.pipe((0, rxjs_1.switchMap)(() => {
|
|
56
|
+
const expires = (0, expires_1.toExpires)(new Date(), skipFor);
|
|
57
|
+
return observable.pipe((0, rxjs_1.skipWhile)(_ => !(0, expires_1.hasExpired)(expires)));
|
|
58
|
+
}));
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
exports.takeAfterTimeElapsedSinceLastEmission = takeAfterTimeElapsedSinceLastEmission;
|
|
62
|
+
//# sourceMappingURL=expires.rxjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expires.rxjs.js","sourceRoot":"","sources":["../../../../../../packages/date/src/lib/expires/expires.rxjs.ts"],"names":[],"mappings":";;;AAAA,wCAA+C;AAE/C,+BAAuI;AACvI,uCAA2D;AAE3D;;;;;GAKG;AACH,SAAgB,YAAY,CAAI,SAAiB;IAC/C,OAAO,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,CAAC,IAAA,mBAAS,EAAC,IAAI,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;AACpD,CAAC;AAFD,oCAEC;AAED;;GAEG;AACH,SAAgB,WAAW;IACzB,OAAO,IAAA,aAAM,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAA,oBAAU,EAAC,OAAO,CAAC,CAAC,CAAC;AACjD,CAAC;AAFD,kCAEC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,SAAkB;IACpD,OAAO,IAAA,aAAM,EAAC,CAAC,CAAC,EAAE,CAAC,IAAA,qBAAc,EAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AACnD,CAAC;AAFD,kDAEC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,SAAkB;IACpD,OAAO,IAAA,aAAM,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAA,qBAAc,EAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AACpD,CAAC;AAFD,kDAEC;AAED;;GAEG;AACH,SAAgB,qCAAqC,CAAI,KAAsB,EAAE,OAAqB;IACpG,OAAO,CAAC,UAAyB,EAAE,EAAE;QACnC,OAAO,KAAK,CAAC,IAAI,CACf,IAAA,gBAAS,EAAC,GAAG,EAAE;YACb,MAAM,OAAO,GAAG,IAAA,mBAAS,EAAC,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,UAAU,CAAC,IAAI,CAAC,IAAA,gBAAS,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAA,oBAAU,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AATD,sFASC;AAED;;GAEG;AACH,SAAgB,qCAAqC,CAAI,KAAsB,EAAE,OAAqB;IACpG,OAAO,CAAC,UAAyB,EAAE,EAAE;QACnC,OAAO,KAAK,CAAC,IAAI,CACf,IAAA,gBAAS,EAAC,GAAG,EAAE;YACb,MAAM,OAAO,GAAG,IAAA,mBAAS,EAAC,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,UAAU,CAAC,IAAI,CAAC,IAAA,gBAAS,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAA,oBAAU,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AATD,sFASC"}
|
package/src/lib/expires/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/date/src/lib/expires/index.ts"],"names":[],"mappings":";;;AAAA,yDAA0B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/date/src/lib/expires/index.ts"],"names":[],"mappings":";;;AAAA,yDAA0B;AAC1B,8DAA+B"}
|
|
@@ -13,15 +13,19 @@ class DateRRuleInstance {
|
|
|
13
13
|
const tzid = rrule.origOptions.tzid;
|
|
14
14
|
let dtstart = rrule.origOptions.dtstart;
|
|
15
15
|
const timezone = tzid || options.timezone;
|
|
16
|
+
/**
|
|
17
|
+
* The normal instance for DateRRuleInstance is used backwards in most cases because DateRRule always
|
|
18
|
+
* parses dates as UTC, so we handle all input dates as base dates, an
|
|
19
|
+
*/
|
|
16
20
|
this.normalInstance = new date_timezone_1.DateTimezoneUtcNormalInstance(timezone);
|
|
17
21
|
if (dtstart && tzid) {
|
|
18
22
|
// Date was passed to both. The dtstart is the base UTC date, but correct for RRule.
|
|
19
23
|
}
|
|
20
24
|
else if (timezone) {
|
|
21
25
|
const startsAt = (_a = options.date) === null || _a === void 0 ? void 0 : _a.startsAt;
|
|
22
|
-
// If startsAt is provided, need to change it to start from the
|
|
26
|
+
// If startsAt is provided, need to change it to start from the base UTC date, if any timezone is provided.
|
|
23
27
|
if (startsAt) {
|
|
24
|
-
const baseStartDate = this.normalInstance.
|
|
28
|
+
const baseStartDate = this.normalInstance.baseDateToTargetDate(startsAt);
|
|
25
29
|
dtstart = baseStartDate;
|
|
26
30
|
}
|
|
27
31
|
}
|
|
@@ -55,9 +59,9 @@ class DateRRuleInstance {
|
|
|
55
59
|
return this.normalInstance.config.timezone;
|
|
56
60
|
}
|
|
57
61
|
nextRecurrenceDate(from = new Date()) {
|
|
58
|
-
const baseFrom = this.normalInstance.
|
|
62
|
+
const baseFrom = this.normalInstance.baseDateToTargetDate(from);
|
|
59
63
|
const rawNext = this.rrule.next(baseFrom);
|
|
60
|
-
const next = (rawNext) ? this.normalInstance.
|
|
64
|
+
const next = (rawNext) ? this.normalInstance.targetDateToBaseDate(rawNext) : undefined;
|
|
61
65
|
return next;
|
|
62
66
|
}
|
|
63
67
|
/**
|
|
@@ -71,11 +75,12 @@ class DateRRuleInstance {
|
|
|
71
75
|
let between;
|
|
72
76
|
if (options.range || options.rangeParams) {
|
|
73
77
|
between = (_a = options.range) !== null && _a !== void 0 ? _a : (0, date_1.makeDateRange)(options.rangeParams);
|
|
74
|
-
between.start = this.normalInstance.
|
|
75
|
-
between.end = this.normalInstance.
|
|
78
|
+
between.start = this.normalInstance.baseDateToTargetDate(between.start);
|
|
79
|
+
between.end = this.normalInstance.baseDateToTargetDate(between.end);
|
|
76
80
|
}
|
|
77
81
|
let startsAtDates;
|
|
78
82
|
if (between) {
|
|
83
|
+
// This finds all
|
|
79
84
|
startsAtDates = this.rrule.between(between.start, between.end, true);
|
|
80
85
|
}
|
|
81
86
|
else if (this.hasForeverRange()) {
|
|
@@ -89,7 +94,7 @@ class DateRRuleInstance {
|
|
|
89
94
|
let dates = allDates;
|
|
90
95
|
// Fix Dates w/ Timezones
|
|
91
96
|
if (this.normalInstance.hasConversion) {
|
|
92
|
-
dates = dates.map((x) => (Object.assign(Object.assign({}, x), { startsAt: this.normalInstance.
|
|
97
|
+
dates = dates.map((x) => (Object.assign(Object.assign({}, x), { startsAt: this.normalInstance.targetDateToBaseDate(x.startsAt) })));
|
|
93
98
|
}
|
|
94
99
|
// Exclude dates
|
|
95
100
|
const exclude = this.options.exclude;
|
|
@@ -105,8 +110,8 @@ class DateRRuleInstance {
|
|
|
105
110
|
* Returns true if there is a single date within the range.
|
|
106
111
|
*/
|
|
107
112
|
haveRecurrenceInDateRange(dateRange) {
|
|
108
|
-
const baseStart = this.normalInstance.
|
|
109
|
-
const baseEnd = this.normalInstance.
|
|
113
|
+
const baseStart = this.normalInstance.targetDateToBaseDate(dateRange.start);
|
|
114
|
+
const baseEnd = this.normalInstance.targetDateToBaseDate(dateRange.end);
|
|
110
115
|
return this.rrule.any({ minDate: baseStart, maxDate: baseEnd });
|
|
111
116
|
}
|
|
112
117
|
/**
|
|
@@ -135,7 +140,7 @@ class DateRRuleInstance {
|
|
|
135
140
|
}
|
|
136
141
|
// Fix Dates w/ timezone.
|
|
137
142
|
if (this.normalInstance.hasConversion) {
|
|
138
|
-
const [startF, endF] = [start, end].filter(x => Boolean(x)).map(x => this.normalInstance.
|
|
143
|
+
const [startF, endF] = [start, end].filter(x => Boolean(x)).map(x => this.normalInstance.baseDateToTargetDate(x));
|
|
139
144
|
start = startF;
|
|
140
145
|
end = endF;
|
|
141
146
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.rrule.js","sourceRoot":"","sources":["../../../../../../packages/date/src/lib/rrule/date.rrule.ts"],"names":[],"mappings":";;;AACA,iCAAuC;AACvC,kCAAmI;AACnI,
|
|
1
|
+
{"version":3,"file":"date.rrule.js","sourceRoot":"","sources":["../../../../../../packages/date/src/lib/rrule/date.rrule.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CommaSeparatedString, Maybe } from '@dereekb/util';
|
|
2
2
|
import { DateSet } from '../date';
|
|
3
|
+
import { DateTimezoneBaseDateConverter } from '../date/date.timezone';
|
|
3
4
|
/**
|
|
4
5
|
* Denotes a single RRule rules string.
|
|
5
6
|
*/
|
|
@@ -97,12 +98,13 @@ export declare class DateRRuleParseUtility {
|
|
|
97
98
|
static separateRRuleStringSetValues(input: RRuleStringLineSet): RRuleStringSetSeparation;
|
|
98
99
|
static parseExdateAttributeFromLine(line: RRuleLineString): RRuleExdateAttribute;
|
|
99
100
|
static parseExdateAttributeFromProperty(property: RRuleProperty): RRuleExdateAttribute;
|
|
101
|
+
static parseDateTimeStringWithTimezone(rfcDateString: RFC5545DateString | RFC5545DateTimeString, timezone: Maybe<string>): Date;
|
|
100
102
|
/**
|
|
101
103
|
* Parses the input Date-Time string.
|
|
102
104
|
*
|
|
103
105
|
* Timezone used to convert date to UTC if date is not specified in UTC (ends in Z).
|
|
104
106
|
*/
|
|
105
|
-
static parseDateTimeString(rfcDateString: RFC5545DateString | RFC5545DateTimeString,
|
|
107
|
+
static parseDateTimeString(rfcDateString: RFC5545DateString | RFC5545DateTimeString, converter: Maybe<DateTimezoneBaseDateConverter>): Date;
|
|
106
108
|
static formatDateTimeString(date: Date): RFC5545DateTimeString;
|
|
107
109
|
static parseProperty(line: RRuleLineString): RRuleProperty;
|
|
108
110
|
static propertyFromRawLine(rawLine: RRuleRawLine): RRuleProperty;
|
|
@@ -40,18 +40,22 @@ class DateRRuleParseUtility {
|
|
|
40
40
|
var _a;
|
|
41
41
|
const timezone = (_a = property.params.find(x => x.key === 'TZID')) === null || _a === void 0 ? void 0 : _a.value;
|
|
42
42
|
const rawDates = property.values.split(',');
|
|
43
|
-
const
|
|
43
|
+
const conversion = new date_timezone_1.DateTimezoneUtcNormalInstance({ timezone });
|
|
44
|
+
const dates = rawDates.map(x => DateRRuleParseUtility.parseDateTimeString(x, conversion));
|
|
44
45
|
return {
|
|
45
46
|
timezone,
|
|
46
47
|
dates
|
|
47
48
|
};
|
|
48
49
|
}
|
|
50
|
+
static parseDateTimeStringWithTimezone(rfcDateString, timezone) {
|
|
51
|
+
return DateRRuleParseUtility.parseDateTimeString(rfcDateString, timezone ? new date_timezone_1.DateTimezoneUtcNormalInstance({ timezone }) : undefined);
|
|
52
|
+
}
|
|
49
53
|
/**
|
|
50
54
|
* Parses the input Date-Time string.
|
|
51
55
|
*
|
|
52
56
|
* Timezone used to convert date to UTC if date is not specified in UTC (ends in Z).
|
|
53
57
|
*/
|
|
54
|
-
static parseDateTimeString(rfcDateString,
|
|
58
|
+
static parseDateTimeString(rfcDateString, converter) {
|
|
55
59
|
const RFC5545_DATE_TIME_FORMAT = /^((\d{4})(\d{2})(\d{2}))(T(\d{2})(\d{2})(\d{2})Z?)?$/;
|
|
56
60
|
const isDateString = (rfcDateString.length === 6);
|
|
57
61
|
const isUTCDate = isDateString || rfcDateString.endsWith('Z');
|
|
@@ -64,9 +68,9 @@ class DateRRuleParseUtility {
|
|
|
64
68
|
const utcDate = new Date(Date.UTC(year, (month - 1), day, hour, minute, second));
|
|
65
69
|
let date = utcDate;
|
|
66
70
|
if (!isUTCDate) {
|
|
67
|
-
// Date was
|
|
68
|
-
if (
|
|
69
|
-
date =
|
|
71
|
+
// Date was parsed as a base/UTC value by rrule, so convert it to the real date.
|
|
72
|
+
if (converter) {
|
|
73
|
+
date = converter.baseDateToTargetDate(date);
|
|
70
74
|
}
|
|
71
75
|
else {
|
|
72
76
|
throw new Error('No timezone was provided when parsing DateTime string.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.rrule.parse.js","sourceRoot":"","sources":["../../../../../../packages/date/src/lib/rrule/date.rrule.parse.ts"],"names":[],"mappings":";;;AAAA,wCAA0F;AAC1F,6CAAqC;AACrC,kCAAkC;AAClC,
|
|
1
|
+
{"version":3,"file":"date.rrule.parse.js","sourceRoot":"","sources":["../../../../../../packages/date/src/lib/rrule/date.rrule.parse.ts"],"names":[],"mappings":"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"}
|