ifc-expressions 2.3.0-beta.0 → 2.3.0-beta.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/dist/cjs/value/IfcDateTimeValue.js +33 -20
- package/dist/cjs/value/IfcDateTimeValue.js.map +1 -1
- package/dist/cjs/value/IfcDateValue.js +12 -5
- package/dist/cjs/value/IfcDateValue.js.map +1 -1
- package/dist/cjs/value/IfcTimeValue.js +8 -5
- package/dist/cjs/value/IfcTimeValue.js.map +1 -1
- package/dist/mjs/value/IfcDateTimeValue.js +33 -20
- package/dist/mjs/value/IfcDateTimeValue.js.map +1 -1
- package/dist/mjs/value/IfcDateValue.js +12 -5
- package/dist/mjs/value/IfcDateValue.js.map +1 -1
- package/dist/mjs/value/IfcTimeValue.js +8 -5
- package/dist/mjs/value/IfcTimeValue.js.map +1 -1
- package/dist/value/IfcDateTimeValue.d.ts +4 -1
- package/dist/value/IfcDateValue.d.ts +2 -0
- package/dist/value/IfcTimeValue.d.ts +2 -0
- package/package.json +1 -1
|
@@ -15,32 +15,36 @@ class IfcDateTimeValue {
|
|
|
15
15
|
constructor(value) {
|
|
16
16
|
if (typeof value === "string") {
|
|
17
17
|
var parsed = IfcDateTimeValue.parseIfcDate(value);
|
|
18
|
-
this.
|
|
18
|
+
this.utcDate = parsed.utcDate;
|
|
19
19
|
this.originalTimeZoneHours = parsed.originalTimeZoneHours;
|
|
20
20
|
this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;
|
|
21
21
|
this.secondFraction = parsed.secondFraction;
|
|
22
|
+
this.isLocal = parsed.isLocal;
|
|
22
23
|
}
|
|
23
24
|
else if (typeof value === "number" || value instanceof decimal_js_1.default) {
|
|
24
25
|
let timeStampSeconds = value;
|
|
25
26
|
if (value instanceof decimal_js_1.default) {
|
|
26
27
|
timeStampSeconds = value.round().toNumber();
|
|
27
28
|
}
|
|
28
|
-
this.
|
|
29
|
+
this.utcDate = new Date(timeStampSeconds);
|
|
29
30
|
this.originalTimeZoneHours = 0;
|
|
30
31
|
this.originalTimeZoneMinutes = 0;
|
|
31
32
|
this.secondFraction = new decimal_js_1.default(0);
|
|
33
|
+
this.isLocal = false;
|
|
32
34
|
}
|
|
33
35
|
else if (value instanceof IfcDateTimeValue) {
|
|
34
|
-
this.
|
|
36
|
+
this.utcDate = value.utcDate;
|
|
35
37
|
this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;
|
|
36
38
|
this.originalTimeZoneHours = value.originalTimeZoneHours;
|
|
37
39
|
this.secondFraction = value.secondFraction;
|
|
40
|
+
this.isLocal = value.isLocal;
|
|
38
41
|
}
|
|
39
42
|
else if (isParsedIfcDateTimeValue(value)) {
|
|
40
|
-
this.
|
|
43
|
+
this.utcDate = value.utcDate;
|
|
41
44
|
this.secondFraction = value.secondFraction;
|
|
42
45
|
this.originalTimeZoneHours = value.originalTimeZoneHours;
|
|
43
46
|
this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;
|
|
47
|
+
this.isLocal = value.isLocal;
|
|
44
48
|
}
|
|
45
49
|
this.stringRepresentation = this.toCanonicalString();
|
|
46
50
|
}
|
|
@@ -58,18 +62,19 @@ class IfcDateTimeValue {
|
|
|
58
62
|
utcDate.setUTCHours(Number.parseInt(hours));
|
|
59
63
|
utcDate.setUTCMinutes(Number.parseInt(minutes));
|
|
60
64
|
utcDate.setUTCSeconds(Number.parseInt(seconds));
|
|
61
|
-
|
|
65
|
+
const secondFraction = (0, IfcExpressionUtils_js_1.isNullish)(fractionSeconds)
|
|
62
66
|
? new decimal_js_1.default("0")
|
|
63
67
|
: new decimal_js_1.default("0" + fractionSeconds); //arbitrary precision fractions (to the precision of Decimal.precision)
|
|
64
|
-
|
|
68
|
+
const originalZoneSign = (0, IfcExpressionUtils_js_1.isNullish)(timeZoneSign)
|
|
65
69
|
? 0
|
|
66
70
|
: timeZoneSign === "+"
|
|
67
71
|
? 1
|
|
68
72
|
: -1;
|
|
69
|
-
|
|
73
|
+
const originalTimeZoneHours = originalZoneSign *
|
|
70
74
|
((0, IfcExpressionUtils_js_1.isNullish)(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));
|
|
71
|
-
|
|
75
|
+
const originalTimeZoneMinutes = originalZoneSign *
|
|
72
76
|
((0, IfcExpressionUtils_js_1.isNullish)(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));
|
|
77
|
+
const isLocal = (0, IfcExpressionUtils_js_1.isNullish)(timeZoneWhole);
|
|
73
78
|
utcDate.setUTCHours(utcDate.getUTCHours() - originalTimeZoneHours);
|
|
74
79
|
utcDate.setUTCMinutes(utcDate.getUTCMinutes() - originalTimeZoneMinutes);
|
|
75
80
|
return {
|
|
@@ -77,6 +82,7 @@ class IfcDateTimeValue {
|
|
|
77
82
|
secondFraction,
|
|
78
83
|
originalTimeZoneHours,
|
|
79
84
|
originalTimeZoneMinutes,
|
|
85
|
+
isLocal,
|
|
80
86
|
};
|
|
81
87
|
}
|
|
82
88
|
static of(value) {
|
|
@@ -88,15 +94,18 @@ class IfcDateTimeValue {
|
|
|
88
94
|
: this.secondFraction.isZero()
|
|
89
95
|
? ""
|
|
90
96
|
: this.secondFraction.toString().substring(1);
|
|
91
|
-
return `${this.pad00(this.
|
|
97
|
+
return `${this.pad00(this.utcDate.getUTCHours() + this.originalTimeZoneHours)}:${this.pad00(this.utcDate.getUTCMinutes() + this.originalTimeZoneMinutes)}:${this.pad00(this.utcDate.getUTCSeconds())}${fraction}`;
|
|
92
98
|
}
|
|
93
99
|
pad00(num) {
|
|
94
100
|
return ("" + num).padStart(2, "0");
|
|
95
101
|
}
|
|
96
102
|
getDateAsString() {
|
|
97
|
-
return `${this.
|
|
103
|
+
return `${this.utcDate.getUTCFullYear()}-${this.pad00(this.utcDate.getUTCMonth() + 1)}-${this.pad00(this.utcDate.getUTCDate())}`;
|
|
98
104
|
}
|
|
99
105
|
getTimeZoneAsString() {
|
|
106
|
+
if (this.isLocal) {
|
|
107
|
+
return "";
|
|
108
|
+
}
|
|
100
109
|
if (this.originalTimeZoneMinutes === 0 &&
|
|
101
110
|
this.originalTimeZoneHours === 0) {
|
|
102
111
|
return "Z";
|
|
@@ -107,7 +116,14 @@ class IfcDateTimeValue {
|
|
|
107
116
|
return `${sign}${this.pad00(Math.abs(this.originalTimeZoneHours))}:${this.pad00(Math.abs(this.originalTimeZoneMinutes))}`;
|
|
108
117
|
}
|
|
109
118
|
getTimeStampSeconds() {
|
|
110
|
-
|
|
119
|
+
const offset = this.isLocal ? new Date().getTimezoneOffset() * 60 : 0;
|
|
120
|
+
return new decimal_js_1.default(this.utcDate.getTime()).divToInt(1000).minus(offset);
|
|
121
|
+
}
|
|
122
|
+
getTime() {
|
|
123
|
+
const offset = this.isLocal ? new Date().getTimezoneOffset() * 60 : 0;
|
|
124
|
+
return new decimal_js_1.default(this.utcDate.getTime())
|
|
125
|
+
.minus(offset)
|
|
126
|
+
.plus(this.secondFraction);
|
|
111
127
|
}
|
|
112
128
|
getValue() {
|
|
113
129
|
return this;
|
|
@@ -125,8 +141,7 @@ class IfcDateTimeValue {
|
|
|
125
141
|
}
|
|
126
142
|
equals(other) {
|
|
127
143
|
return (IfcDateTimeValue.isIfcDateTimeValueType(other) &&
|
|
128
|
-
this.
|
|
129
|
-
this.secondFraction.eq(other.secondFraction));
|
|
144
|
+
this.getTime().eq(other.getTime()));
|
|
130
145
|
}
|
|
131
146
|
toCanonicalString() {
|
|
132
147
|
return (this.getDateAsString() +
|
|
@@ -138,11 +153,7 @@ class IfcDateTimeValue {
|
|
|
138
153
|
return this.stringRepresentation;
|
|
139
154
|
}
|
|
140
155
|
compareTo(other) {
|
|
141
|
-
|
|
142
|
-
if (diff != 0) {
|
|
143
|
-
return diff;
|
|
144
|
-
}
|
|
145
|
-
return decimal_js_1.default.sign(this.secondFraction.minus(other.secondFraction));
|
|
156
|
+
return decimal_js_1.default.sign(this.getTime().minus(other.getTime()));
|
|
146
157
|
}
|
|
147
158
|
static ofTimeStampSeconds(timeStampSeconds) {
|
|
148
159
|
var timeStampMillis = timeStampSeconds;
|
|
@@ -162,7 +173,7 @@ class IfcDateTimeValue {
|
|
|
162
173
|
return IfcTimeStampValue_js_1.IfcTimeStampValue.of(this.getTimeStampSeconds());
|
|
163
174
|
}
|
|
164
175
|
addDuration(duration) {
|
|
165
|
-
const resultDate = new Date(this.
|
|
176
|
+
const resultDate = new Date(this.utcDate.getTime());
|
|
166
177
|
const accumulatedFractions = this.secondFraction.add(duration.getFractionAsSeconds());
|
|
167
178
|
const newSecondFraction = accumulatedFractions.minus(accumulatedFractions.divToInt(1));
|
|
168
179
|
resultDate.setUTCSeconds(resultDate.getUTCSeconds() + accumulatedFractions.divToInt(1).toNumber());
|
|
@@ -179,6 +190,7 @@ class IfcDateTimeValue {
|
|
|
179
190
|
secondFraction: newSecondFraction,
|
|
180
191
|
originalTimeZoneHours: this.originalTimeZoneHours,
|
|
181
192
|
originalTimeZoneMinutes: this.originalTimeZoneMinutes,
|
|
193
|
+
isLocal: this.isLocal,
|
|
182
194
|
});
|
|
183
195
|
}
|
|
184
196
|
}
|
|
@@ -188,7 +200,8 @@ function isParsedIfcDateTimeValue(arg) {
|
|
|
188
200
|
return (!(0, IfcExpressionUtils_js_1.isNullish)(arg.utcDate) &&
|
|
189
201
|
!(0, IfcExpressionUtils_js_1.isNullish)(arg.secondFraction) &&
|
|
190
202
|
!(0, IfcExpressionUtils_js_1.isNullish)(arg.originalTimeZoneHours) &&
|
|
191
|
-
!(0, IfcExpressionUtils_js_1.isNullish)(arg.originalTimeZoneMinutes)
|
|
203
|
+
!(0, IfcExpressionUtils_js_1.isNullish)(arg.originalTimeZoneMinutes) &&
|
|
204
|
+
!(0, IfcExpressionUtils_js_1.isNullish)(arg.isLocal));
|
|
192
205
|
}
|
|
193
206
|
exports.isParsedIfcDateTimeValue = isParsedIfcDateTimeValue;
|
|
194
207
|
//# sourceMappingURL=IfcDateTimeValue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/value/IfcDateTimeValue.ts"],"names":[],"mappings":"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","file":"value/IfcDateTimeValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { Comparable } from \"./Comparable.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { DateFormatException } from \"../error/value/DateFormatException.js\";\nimport Decimal from \"decimal.js\";\nimport { IfcDateValue } from \"./IfcDateValue.js\";\nimport { IfcTimeValue } from \"./IfcTimeValue.js\";\nimport { IfcTimeStampValue } from \"./IfcTimeStampValue.js\";\nimport { IfcDurationValue } from \"./IfcDurationValue.js\";\n\nexport class IfcDateTimeValue\n implements Value<IfcDateTimeValue>, Comparable<IfcDateTimeValue>\n{\n private readonly utcDateValue: Date;\n private readonly stringRepresentation;\n private readonly originalTimeZoneHours: number; // hours ahead of (+) or behind (-) UTC\n private readonly originalTimeZoneMinutes: number; // minutes ahead of (+) or behind (-) UTC\n private readonly secondFraction: Decimal;\n private static readonly regex =\n /^([+\\-]?(?:[1-9]\\d*)?\\d{4}(?<!0000))-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|(?<=23:59:)60)(\\.\\d+)?(Z|([+\\-])(0[0-9]|1[0-2])(?::?([0-5][0-9]))?)?$/;\n\n constructor(\n value: string | number | Decimal | IfcDateTimeValue | ParsedIfcDateTimeValue\n ) {\n if (typeof value === \"string\") {\n var parsed = IfcDateTimeValue.parseIfcDate(value);\n this.utcDateValue = parsed.utcDate;\n this.originalTimeZoneHours = parsed.originalTimeZoneHours;\n this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;\n this.secondFraction = parsed.secondFraction;\n } else if (typeof value === \"number\" || value instanceof Decimal) {\n let timeStampSeconds = value;\n if (value instanceof Decimal) {\n timeStampSeconds = (value as Decimal).round().toNumber();\n }\n this.utcDateValue = new Date(timeStampSeconds as number);\n this.originalTimeZoneHours = 0;\n this.originalTimeZoneMinutes = 0;\n this.secondFraction = new Decimal(0);\n } else if (value instanceof IfcDateTimeValue) {\n this.utcDateValue = value.utcDateValue;\n this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;\n this.originalTimeZoneHours = value.originalTimeZoneHours;\n this.secondFraction = value.secondFraction;\n } else if (isParsedIfcDateTimeValue(value)) {\n this.utcDateValue = value.utcDate;\n this.secondFraction = value.secondFraction;\n this.originalTimeZoneHours = value.originalTimeZoneHours;\n this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;\n }\n this.stringRepresentation = this.toCanonicalString();\n }\n\n public static parseIfcDate(value: string): ParsedIfcDateTimeValue {\n Decimal.set({ defaults: true });\n let match = value.match(this.regex);\n if (isNullish(match)) {\n throw new DateFormatException(\"Not an IfcDateTime: \" + value);\n }\n let [\n wholeString,\n year,\n month,\n day,\n hours,\n minutes,\n seconds,\n fractionSeconds,\n timeZoneWhole,\n timeZoneSign,\n timeZoneHours,\n timeZoneMinutes,\n ] = match;\n var utcDate = new Date(0);\n utcDate.setUTCFullYear(Number.parseInt(year));\n utcDate.setUTCMonth(Number.parseInt(month) - 1);\n utcDate.setUTCDate(Number.parseInt(day));\n utcDate.setUTCHours(Number.parseInt(hours));\n utcDate.setUTCMinutes(Number.parseInt(minutes));\n utcDate.setUTCSeconds(Number.parseInt(seconds));\n var secondFraction = isNullish(fractionSeconds)\n ? new Decimal(\"0\")\n : new Decimal(\"0\" + fractionSeconds); //arbitrary precision fractions (to the precision of Decimal.precision)\n var originalZoneSign = isNullish(timeZoneSign)\n ? 0\n : timeZoneSign === \"+\"\n ? 1\n : -1;\n var originalTimeZoneHours =\n originalZoneSign *\n (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));\n var originalTimeZoneMinutes =\n originalZoneSign *\n (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));\n utcDate.setUTCHours(utcDate.getUTCHours() - originalTimeZoneHours);\n utcDate.setUTCMinutes(utcDate.getUTCMinutes() - originalTimeZoneMinutes);\n return {\n utcDate,\n secondFraction,\n originalTimeZoneHours,\n originalTimeZoneMinutes,\n };\n }\n\n public static of(value: string): IfcDateTimeValue {\n return new IfcDateTimeValue(value);\n }\n\n private getTimeAsString() {\n const fraction = isNullish(this.secondFraction)\n ? \"\"\n : this.secondFraction.isZero()\n ? \"\"\n : this.secondFraction.toString().substring(1);\n return `${this.pad00(\n this.utcDateValue.getUTCHours() + this.originalTimeZoneHours\n )}:${this.pad00(\n this.utcDateValue.getUTCMinutes() + this.originalTimeZoneMinutes\n )}:${this.pad00(this.utcDateValue.getUTCSeconds())}${fraction}`;\n }\n\n private pad00(num: number): string {\n return (\"\" + num).padStart(2, \"0\");\n }\n\n private getDateAsString() {\n return `${this.utcDateValue.getUTCFullYear()}-${this.pad00(\n this.utcDateValue.getUTCMonth() + 1\n )}-${this.pad00(this.utcDateValue.getUTCDate())}`;\n }\n\n getTimeZoneAsString(): String {\n if (\n this.originalTimeZoneMinutes === 0 &&\n this.originalTimeZoneHours === 0\n ) {\n return \"Z\";\n }\n const sign =\n this.originalTimeZoneHours >= 0 && this.originalTimeZoneMinutes >= 0\n ? \"+\"\n : \"-\";\n return `${sign}${this.pad00(\n Math.abs(this.originalTimeZoneHours)\n )}:${this.pad00(Math.abs(this.originalTimeZoneMinutes))}`;\n }\n\n private getTimeStampSeconds(): Decimal {\n return new Decimal(this.utcDateValue.getTime()).divToInt(1000);\n }\n\n getValue(): IfcDateTimeValue {\n return this;\n }\n\n getType(): ExprType {\n return Type.IFC_DATE_TIME;\n }\n\n static isIfcDateTimeValueType(arg: any): arg is IfcDateTimeValue {\n return (\n arg instanceof IfcDateTimeValue ||\n (!isNullish(arg.stringRepresentation) &&\n !isNullish(arg.stringRepresentation.match(IfcDateTimeValue.regex)))\n );\n }\n\n public static isValidStringRepresentation(str: string): boolean {\n return this.regex.test(str);\n }\n\n equals(other: Value<any>): boolean {\n return (\n IfcDateTimeValue.isIfcDateTimeValueType(other) &&\n this.utcDateValue.getTime() === other.utcDateValue.getTime() &&\n this.secondFraction.eq(other.secondFraction)\n );\n }\n\n private toCanonicalString(): string {\n return (\n this.getDateAsString() +\n \"T\" +\n this.getTimeAsString() +\n this.getTimeZoneAsString()\n );\n }\n\n toString(): string {\n return this.stringRepresentation;\n }\n\n compareTo(other: IfcDateTimeValue): number {\n var diff = this.utcDateValue.getTime() - other.utcDateValue.getTime();\n if (diff != 0) {\n return diff;\n }\n return Decimal.sign(this.secondFraction.minus(other.secondFraction));\n }\n\n static ofTimeStampSeconds(timeStampSeconds: Decimal | number) {\n var timeStampMillis = timeStampSeconds;\n if (timeStampSeconds instanceof Decimal) {\n timeStampMillis = timeStampSeconds.round().toNumber();\n }\n timeStampMillis = (timeStampMillis as number) * 1000;\n return new IfcDateTimeValue(timeStampMillis);\n }\n\n toIfcDateValue(): IfcDateValue {\n return IfcDateValue.of(this.getDateAsString() + this.getTimeZoneAsString());\n }\n\n toIfcTimeValue(): IfcTimeValue {\n return IfcTimeValue.of(this.getTimeAsString() + this.getTimeZoneAsString());\n }\n\n toIfcTimeStampValue(): IfcTimeStampValue {\n return IfcTimeStampValue.of(this.getTimeStampSeconds());\n }\n\n addDuration(duration: IfcDurationValue): IfcDateTimeValue {\n const resultDate = new Date(this.utcDateValue.getTime());\n const accumulatedFractions = this.secondFraction.add(\n duration.getFractionAsSeconds()\n );\n const newSecondFraction = accumulatedFractions.minus(\n accumulatedFractions.divToInt(1)\n );\n resultDate.setUTCSeconds(\n resultDate.getUTCSeconds() + accumulatedFractions.divToInt(1).toNumber()\n );\n resultDate.setUTCSeconds(\n resultDate.getUTCSeconds() + duration.getSeconds().divToInt(1).toNumber()\n );\n resultDate.setUTCMinutes(\n resultDate.getUTCMinutes() + duration.getMinutes().divToInt(1).toNumber()\n );\n resultDate.setUTCHours(\n resultDate.getUTCHours() + duration.getHours().divToInt(1).toNumber()\n );\n resultDate.setUTCDate(\n resultDate.getUTCDate() + duration.getDays().divToInt(1).toNumber()\n );\n resultDate.setUTCDate(\n resultDate.getUTCDate() +\n duration.getWeeks().divToInt(1).times(7).toNumber()\n );\n resultDate.setUTCMonth(\n resultDate.getUTCMonth() + duration.getMonths().divToInt(1).toNumber()\n );\n resultDate.setUTCFullYear(\n resultDate.getUTCFullYear() + duration.getYears().divToInt(1).toNumber()\n );\n return new IfcDateTimeValue({\n utcDate: resultDate,\n secondFraction: newSecondFraction,\n originalTimeZoneHours: this.originalTimeZoneHours,\n originalTimeZoneMinutes: this.originalTimeZoneMinutes,\n });\n }\n}\n\nexport type ParsedIfcDateTimeValue = {\n utcDate: Date;\n secondFraction: Decimal;\n originalTimeZoneHours?: number;\n originalTimeZoneMinutes?: number;\n};\n\nexport function isParsedIfcDateTimeValue(\n arg: any\n): arg is ParsedIfcDateTimeValue {\n return (\n !isNullish(arg.utcDate) &&\n !isNullish(arg.secondFraction) &&\n !isNullish(arg.originalTimeZoneHours) &&\n !isNullish(arg.originalTimeZoneMinutes)\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/value/IfcDateTimeValue.ts"],"names":[],"mappings":"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","file":"value/IfcDateTimeValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { Comparable } from \"./Comparable.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { DateFormatException } from \"../error/value/DateFormatException.js\";\nimport Decimal from \"decimal.js\";\nimport { IfcDateValue } from \"./IfcDateValue.js\";\nimport { IfcTimeValue } from \"./IfcTimeValue.js\";\nimport { IfcTimeStampValue } from \"./IfcTimeStampValue.js\";\nimport { IfcDurationValue } from \"./IfcDurationValue.js\";\n\nexport class IfcDateTimeValue\n implements Value<IfcDateTimeValue>, Comparable<IfcDateTimeValue>\n{\n private readonly utcDate: Date;\n private readonly stringRepresentation;\n private readonly originalTimeZoneHours: number; // hours ahead of (+) or behind (-) UTC\n private readonly originalTimeZoneMinutes: number; // minutes ahead of (+) or behind (-) UTC\n private readonly isLocal: boolean;\n private readonly secondFraction: Decimal;\n private static readonly regex =\n /^([+\\-]?(?:[1-9]\\d*)?\\d{4}(?<!0000))-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|(?<=23:59:)60)(\\.\\d+)?(Z|([+\\-])(0[0-9]|1[0-2])(?::?([0-5][0-9]))?)?$/;\n\n constructor(\n value: string | number | Decimal | IfcDateTimeValue | ParsedIfcDateTimeValue\n ) {\n if (typeof value === \"string\") {\n var parsed = IfcDateTimeValue.parseIfcDate(value);\n this.utcDate = parsed.utcDate;\n this.originalTimeZoneHours = parsed.originalTimeZoneHours;\n this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;\n this.secondFraction = parsed.secondFraction;\n this.isLocal = parsed.isLocal;\n } else if (typeof value === \"number\" || value instanceof Decimal) {\n let timeStampSeconds = value;\n if (value instanceof Decimal) {\n timeStampSeconds = (value as Decimal).round().toNumber();\n }\n this.utcDate = new Date(timeStampSeconds as number);\n this.originalTimeZoneHours = 0;\n this.originalTimeZoneMinutes = 0;\n this.secondFraction = new Decimal(0);\n this.isLocal = false;\n } else if (value instanceof IfcDateTimeValue) {\n this.utcDate = value.utcDate;\n this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;\n this.originalTimeZoneHours = value.originalTimeZoneHours;\n this.secondFraction = value.secondFraction;\n this.isLocal = value.isLocal;\n } else if (isParsedIfcDateTimeValue(value)) {\n this.utcDate = value.utcDate;\n this.secondFraction = value.secondFraction;\n this.originalTimeZoneHours = value.originalTimeZoneHours;\n this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;\n this.isLocal = value.isLocal;\n }\n this.stringRepresentation = this.toCanonicalString();\n }\n\n public static parseIfcDate(value: string): ParsedIfcDateTimeValue {\n Decimal.set({ defaults: true });\n let match = value.match(this.regex);\n if (isNullish(match)) {\n throw new DateFormatException(\"Not an IfcDateTime: \" + value);\n }\n let [\n wholeString,\n year,\n month,\n day,\n hours,\n minutes,\n seconds,\n fractionSeconds,\n timeZoneWhole,\n timeZoneSign,\n timeZoneHours,\n timeZoneMinutes,\n ] = match;\n var utcDate = new Date(0);\n utcDate.setUTCFullYear(Number.parseInt(year));\n utcDate.setUTCMonth(Number.parseInt(month) - 1);\n utcDate.setUTCDate(Number.parseInt(day));\n utcDate.setUTCHours(Number.parseInt(hours));\n utcDate.setUTCMinutes(Number.parseInt(minutes));\n utcDate.setUTCSeconds(Number.parseInt(seconds));\n const secondFraction = isNullish(fractionSeconds)\n ? new Decimal(\"0\")\n : new Decimal(\"0\" + fractionSeconds); //arbitrary precision fractions (to the precision of Decimal.precision)\n const originalZoneSign = isNullish(timeZoneSign)\n ? 0\n : timeZoneSign === \"+\"\n ? 1\n : -1;\n const originalTimeZoneHours =\n originalZoneSign *\n (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));\n const originalTimeZoneMinutes =\n originalZoneSign *\n (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));\n const isLocal = isNullish(timeZoneWhole);\n utcDate.setUTCHours(utcDate.getUTCHours() - originalTimeZoneHours);\n utcDate.setUTCMinutes(utcDate.getUTCMinutes() - originalTimeZoneMinutes);\n return {\n utcDate,\n secondFraction,\n originalTimeZoneHours,\n originalTimeZoneMinutes,\n isLocal,\n };\n }\n\n public static of(value: string): IfcDateTimeValue {\n return new IfcDateTimeValue(value);\n }\n\n private getTimeAsString() {\n const fraction = isNullish(this.secondFraction)\n ? \"\"\n : this.secondFraction.isZero()\n ? \"\"\n : this.secondFraction.toString().substring(1);\n return `${this.pad00(\n this.utcDate.getUTCHours() + this.originalTimeZoneHours\n )}:${this.pad00(\n this.utcDate.getUTCMinutes() + this.originalTimeZoneMinutes\n )}:${this.pad00(this.utcDate.getUTCSeconds())}${fraction}`;\n }\n\n private pad00(num: number): string {\n return (\"\" + num).padStart(2, \"0\");\n }\n\n private getDateAsString() {\n return `${this.utcDate.getUTCFullYear()}-${this.pad00(\n this.utcDate.getUTCMonth() + 1\n )}-${this.pad00(this.utcDate.getUTCDate())}`;\n }\n\n getTimeZoneAsString(): String {\n if (this.isLocal) {\n return \"\";\n }\n if (\n this.originalTimeZoneMinutes === 0 &&\n this.originalTimeZoneHours === 0\n ) {\n return \"Z\";\n }\n const sign =\n this.originalTimeZoneHours >= 0 && this.originalTimeZoneMinutes >= 0\n ? \"+\"\n : \"-\";\n return `${sign}${this.pad00(\n Math.abs(this.originalTimeZoneHours)\n )}:${this.pad00(Math.abs(this.originalTimeZoneMinutes))}`;\n }\n\n private getTimeStampSeconds(): Decimal {\n const offset = this.isLocal ? new Date().getTimezoneOffset() * 60 : 0;\n return new Decimal(this.utcDate.getTime()).divToInt(1000).minus(offset);\n }\n\n private getTime(): Decimal {\n const offset = this.isLocal ? new Date().getTimezoneOffset() * 60 : 0;\n return new Decimal(this.utcDate.getTime())\n .minus(offset)\n .plus(this.secondFraction);\n }\n\n getValue(): IfcDateTimeValue {\n return this;\n }\n\n getType(): ExprType {\n return Type.IFC_DATE_TIME;\n }\n\n static isIfcDateTimeValueType(arg: any): arg is IfcDateTimeValue {\n return (\n arg instanceof IfcDateTimeValue ||\n (!isNullish(arg.stringRepresentation) &&\n !isNullish(arg.stringRepresentation.match(IfcDateTimeValue.regex)))\n );\n }\n\n public static isValidStringRepresentation(str: string): boolean {\n return this.regex.test(str);\n }\n\n equals(other: Value<any>): boolean {\n return (\n IfcDateTimeValue.isIfcDateTimeValueType(other) &&\n this.getTime().eq(other.getTime())\n );\n }\n\n private toCanonicalString(): string {\n return (\n this.getDateAsString() +\n \"T\" +\n this.getTimeAsString() +\n this.getTimeZoneAsString()\n );\n }\n\n toString(): string {\n return this.stringRepresentation;\n }\n\n compareTo(other: IfcDateTimeValue): number {\n return Decimal.sign(this.getTime().minus(other.getTime()));\n }\n\n static ofTimeStampSeconds(timeStampSeconds: Decimal | number) {\n var timeStampMillis = timeStampSeconds;\n if (timeStampSeconds instanceof Decimal) {\n timeStampMillis = timeStampSeconds.round().toNumber();\n }\n timeStampMillis = (timeStampMillis as number) * 1000;\n return new IfcDateTimeValue(timeStampMillis);\n }\n\n toIfcDateValue(): IfcDateValue {\n return IfcDateValue.of(this.getDateAsString() + this.getTimeZoneAsString());\n }\n\n toIfcTimeValue(): IfcTimeValue {\n return IfcTimeValue.of(this.getTimeAsString() + this.getTimeZoneAsString());\n }\n\n toIfcTimeStampValue(): IfcTimeStampValue {\n return IfcTimeStampValue.of(this.getTimeStampSeconds());\n }\n\n addDuration(duration: IfcDurationValue): IfcDateTimeValue {\n const resultDate = new Date(this.utcDate.getTime());\n const accumulatedFractions = this.secondFraction.add(\n duration.getFractionAsSeconds()\n );\n const newSecondFraction = accumulatedFractions.minus(\n accumulatedFractions.divToInt(1)\n );\n resultDate.setUTCSeconds(\n resultDate.getUTCSeconds() + accumulatedFractions.divToInt(1).toNumber()\n );\n resultDate.setUTCSeconds(\n resultDate.getUTCSeconds() + duration.getSeconds().divToInt(1).toNumber()\n );\n resultDate.setUTCMinutes(\n resultDate.getUTCMinutes() + duration.getMinutes().divToInt(1).toNumber()\n );\n resultDate.setUTCHours(\n resultDate.getUTCHours() + duration.getHours().divToInt(1).toNumber()\n );\n resultDate.setUTCDate(\n resultDate.getUTCDate() + duration.getDays().divToInt(1).toNumber()\n );\n resultDate.setUTCDate(\n resultDate.getUTCDate() +\n duration.getWeeks().divToInt(1).times(7).toNumber()\n );\n resultDate.setUTCMonth(\n resultDate.getUTCMonth() + duration.getMonths().divToInt(1).toNumber()\n );\n resultDate.setUTCFullYear(\n resultDate.getUTCFullYear() + duration.getYears().divToInt(1).toNumber()\n );\n return new IfcDateTimeValue({\n utcDate: resultDate,\n secondFraction: newSecondFraction,\n originalTimeZoneHours: this.originalTimeZoneHours,\n originalTimeZoneMinutes: this.originalTimeZoneMinutes,\n isLocal: this.isLocal,\n });\n }\n}\n\nexport type ParsedIfcDateTimeValue = {\n utcDate: Date;\n secondFraction: Decimal;\n originalTimeZoneHours?: number;\n originalTimeZoneMinutes?: number;\n isLocal: boolean;\n};\n\nexport function isParsedIfcDateTimeValue(\n arg: any\n): arg is ParsedIfcDateTimeValue {\n return (\n !isNullish(arg.utcDate) &&\n !isNullish(arg.secondFraction) &&\n !isNullish(arg.originalTimeZoneHours) &&\n !isNullish(arg.originalTimeZoneMinutes) &&\n !isNullish(arg.isLocal)\n );\n}\n"]}
|
|
@@ -10,6 +10,7 @@ class IfcDateValue {
|
|
|
10
10
|
this.utcDateValue = parsed.utcDate;
|
|
11
11
|
this.originalTimeZoneHours = parsed.originalTimeZoneHours;
|
|
12
12
|
this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;
|
|
13
|
+
this.isLocal = parsed.isLocal;
|
|
13
14
|
this.stringRepresentation = value;
|
|
14
15
|
}
|
|
15
16
|
static parseIfcDate(value) {
|
|
@@ -18,22 +19,28 @@ class IfcDateValue {
|
|
|
18
19
|
throw new DateFormatException_js_1.DateFormatException("Not an IfcDate: " + value);
|
|
19
20
|
}
|
|
20
21
|
let [wholeString, year, month, day, timeZoneWhole, timeZoneSign, timeZoneHours, timeZoneMinutes,] = match;
|
|
21
|
-
|
|
22
|
+
const utcDate = new Date(0);
|
|
22
23
|
utcDate.setUTCFullYear(Number.parseInt(year));
|
|
23
24
|
utcDate.setUTCMonth(Number.parseInt(month) - 1);
|
|
24
25
|
utcDate.setUTCDate(Number.parseInt(day));
|
|
25
|
-
|
|
26
|
+
const originalZoneSign = (0, IfcExpressionUtils_js_1.isNullish)(timeZoneSign)
|
|
26
27
|
? 0
|
|
27
28
|
: timeZoneSign === "+"
|
|
28
29
|
? -1
|
|
29
30
|
: +1; //why? Beause +1 means 1 hour ahead of UTC, so we have to subtract 1 to get UTC
|
|
30
|
-
|
|
31
|
+
const originalTimeZoneHours = originalZoneSign *
|
|
31
32
|
((0, IfcExpressionUtils_js_1.isNullish)(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));
|
|
32
|
-
|
|
33
|
+
const originalTimeZoneMinutes = originalZoneSign *
|
|
33
34
|
((0, IfcExpressionUtils_js_1.isNullish)(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));
|
|
35
|
+
const isLocal = (0, IfcExpressionUtils_js_1.isNullish)(timeZoneWhole);
|
|
34
36
|
utcDate.setUTCHours(utcDate.getUTCHours() + originalTimeZoneHours);
|
|
35
37
|
utcDate.setUTCMinutes(utcDate.getUTCMinutes() + originalTimeZoneMinutes);
|
|
36
|
-
return {
|
|
38
|
+
return {
|
|
39
|
+
utcDate: utcDate,
|
|
40
|
+
originalTimeZoneHours,
|
|
41
|
+
originalTimeZoneMinutes,
|
|
42
|
+
isLocal,
|
|
43
|
+
};
|
|
37
44
|
}
|
|
38
45
|
static of(value) {
|
|
39
46
|
return new IfcDateValue(value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/value/IfcDateValue.ts"],"names":[],"mappings":";;;AAGA,+CAAwC;AACxC,yEAA0D;AAC1D,kFAA4E;AAE5E,MAAa,YAAY;
|
|
1
|
+
{"version":3,"sources":["../../src/value/IfcDateValue.ts"],"names":[],"mappings":"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","file":"value/IfcDateValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { Comparable } from \"./Comparable.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { DateFormatException } from \"../error/value/DateFormatException.js\";\n\nexport class IfcDateValue\n implements Value<IfcDateValue>, Comparable<IfcDateValue>\n{\n private readonly utcDateValue: Date;\n private readonly stringRepresentation;\n private readonly originalTimeZoneHours: number; // hours ahead of (+) or behind (-) UTC\n private readonly originalTimeZoneMinutes: number; // minutes ahead of (+) or behind (-) UTC\n private readonly isLocal: boolean;\n private static readonly regex =\n /^([+\\-]?(?:[1-9]\\d*)?\\d{4}(?<!0000))-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])(Z|([+\\-])(0[0-9]|1[0-2])(?::?([0-5][0-9]))?)?$/;\n\n constructor(value: string) {\n var parsed = IfcDateValue.parseIfcDate(value);\n this.utcDateValue = parsed.utcDate;\n this.originalTimeZoneHours = parsed.originalTimeZoneHours;\n this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;\n this.isLocal = parsed.isLocal;\n this.stringRepresentation = value;\n }\n\n public static parseIfcDate(value: string): {\n utcDate: Date;\n originalTimeZoneHours?: number;\n originalTimeZoneMinutes?: number;\n isLocal: boolean;\n } {\n let match = value.match(this.regex);\n if (isNullish(match)) {\n throw new DateFormatException(\"Not an IfcDate: \" + value);\n }\n let [\n wholeString,\n year,\n month,\n day,\n timeZoneWhole,\n timeZoneSign,\n timeZoneHours,\n timeZoneMinutes,\n ] = match;\n const utcDate = new Date(0);\n utcDate.setUTCFullYear(Number.parseInt(year));\n utcDate.setUTCMonth(Number.parseInt(month) - 1);\n utcDate.setUTCDate(Number.parseInt(day));\n const originalZoneSign = isNullish(timeZoneSign)\n ? 0\n : timeZoneSign === \"+\"\n ? -1\n : +1; //why? Beause +1 means 1 hour ahead of UTC, so we have to subtract 1 to get UTC\n const originalTimeZoneHours =\n originalZoneSign *\n (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));\n const originalTimeZoneMinutes =\n originalZoneSign *\n (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));\n const isLocal = isNullish(timeZoneWhole);\n utcDate.setUTCHours(utcDate.getUTCHours() + originalTimeZoneHours);\n utcDate.setUTCMinutes(utcDate.getUTCMinutes() + originalTimeZoneMinutes);\n return {\n utcDate: utcDate,\n originalTimeZoneHours,\n originalTimeZoneMinutes,\n isLocal,\n };\n }\n\n public static of(value: string): IfcDateValue {\n return new IfcDateValue(value);\n }\n\n getValue(): IfcDateValue {\n return this;\n }\n\n getType(): ExprType {\n return Type.IFC_DATE;\n }\n\n static isIfcDateValueType(arg: any): arg is IfcDateValue {\n return (\n arg instanceof IfcDateValue ||\n (!isNullish(arg.stringRepresentation) &&\n !isNullish(arg.stringRepresentation.match(IfcDateValue.regex)))\n );\n }\n\n public static isValidStringRepresentation(str: string): boolean {\n return this.regex.test(str);\n }\n\n equals(other: Value<any>): boolean {\n return (\n IfcDateValue.isIfcDateValueType(other) &&\n this.utcDateValue.getTime() === other.utcDateValue.getTime()\n );\n }\n\n toString(): string {\n return this.stringRepresentation;\n }\n\n compareTo(other: IfcDateValue): number {\n return this.utcDateValue.getTime() - other.utcDateValue.getTime();\n }\n}\n"]}
|
|
@@ -15,6 +15,7 @@ class IfcTimeValue {
|
|
|
15
15
|
this.originalTimeZoneHours = parsed.originalTimeZoneHours;
|
|
16
16
|
this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;
|
|
17
17
|
this.secondFraction = parsed.secondFraction;
|
|
18
|
+
this.isLocal = parsed.isLocal;
|
|
18
19
|
this.stringRepresentation = value;
|
|
19
20
|
}
|
|
20
21
|
static parseIfcDate(value) {
|
|
@@ -23,22 +24,23 @@ class IfcTimeValue {
|
|
|
23
24
|
throw new DateFormatException_js_1.DateFormatException("Not an IfcTime: " + value);
|
|
24
25
|
}
|
|
25
26
|
let [wholeString, hours, minutes, seconds, fractionSeconds, timeZoneWhole, timeZoneSign, timeZoneHours, timeZoneMinutes,] = match;
|
|
26
|
-
|
|
27
|
+
const utcDate = new Date(0);
|
|
27
28
|
utcDate.setUTCHours(Number.parseInt(hours));
|
|
28
29
|
utcDate.setUTCMinutes(Number.parseInt(minutes));
|
|
29
30
|
utcDate.setUTCSeconds(Number.parseInt(seconds));
|
|
30
|
-
|
|
31
|
+
const secondFraction = (0, IfcExpressionUtils_js_1.isNullish)(fractionSeconds)
|
|
31
32
|
? new decimal_js_1.default("0")
|
|
32
33
|
: new decimal_js_1.default("0" + fractionSeconds); //arbitrary precision fractions
|
|
33
|
-
|
|
34
|
+
const originalZoneSign = (0, IfcExpressionUtils_js_1.isNullish)(timeZoneSign)
|
|
34
35
|
? 0
|
|
35
36
|
: timeZoneSign === "+"
|
|
36
37
|
? 1
|
|
37
38
|
: -1;
|
|
38
|
-
|
|
39
|
+
const originalTimeZoneHours = originalZoneSign *
|
|
39
40
|
((0, IfcExpressionUtils_js_1.isNullish)(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));
|
|
40
|
-
|
|
41
|
+
const originalTimeZoneMinutes = originalZoneSign *
|
|
41
42
|
((0, IfcExpressionUtils_js_1.isNullish)(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));
|
|
43
|
+
const isLocal = (0, IfcExpressionUtils_js_1.isNullish)(timeZoneWhole);
|
|
42
44
|
utcDate.setUTCHours(utcDate.getUTCHours() - originalTimeZoneHours);
|
|
43
45
|
utcDate.setUTCMinutes(utcDate.getUTCMinutes() - originalTimeZoneMinutes);
|
|
44
46
|
return {
|
|
@@ -46,6 +48,7 @@ class IfcTimeValue {
|
|
|
46
48
|
secondFraction,
|
|
47
49
|
originalTimeZoneHours,
|
|
48
50
|
originalTimeZoneMinutes,
|
|
51
|
+
isLocal,
|
|
49
52
|
};
|
|
50
53
|
}
|
|
51
54
|
static of(value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/value/IfcTimeValue.ts"],"names":[],"mappings":";;;;;;AAGA,+CAAwC;AACxC,yEAA0D;AAC1D,kFAA4E;AAC5E,4DAAiC;AAEjC,MAAa,YAAY;
|
|
1
|
+
{"version":3,"sources":["../../src/value/IfcTimeValue.ts"],"names":[],"mappings":"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","file":"value/IfcTimeValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { Comparable } from \"./Comparable.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { DateFormatException } from \"../error/value/DateFormatException.js\";\nimport Decimal from \"decimal.js\";\n\nexport class IfcTimeValue\n implements Value<IfcTimeValue>, Comparable<IfcTimeValue>\n{\n private readonly utcDateValue: Date;\n private readonly stringRepresentation;\n private readonly originalTimeZoneHours: number; // hours ahead of (+) or behind (-) UTC\n private readonly originalTimeZoneMinutes: number; // minutes ahead of (+) or behind (-) UTC\n private readonly isLocal: boolean;\n private readonly secondFraction: Decimal;\n\n private static readonly regex =\n /^([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|(?<=23:59:)60)(\\.\\d+)?(Z|([+\\-])(0[0-9]|1[0-2])(?::?([0-5][0-9]))?)?$/;\n\n constructor(value: string) {\n var parsed = IfcTimeValue.parseIfcDate(value);\n this.utcDateValue = parsed.utcDate;\n this.originalTimeZoneHours = parsed.originalTimeZoneHours;\n this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;\n this.secondFraction = parsed.secondFraction;\n this.isLocal = parsed.isLocal;\n this.stringRepresentation = value;\n }\n\n public static parseIfcDate(value: string): {\n utcDate: Date;\n secondFraction: Decimal;\n originalTimeZoneHours?: number;\n originalTimeZoneMinutes?: number;\n isLocal: boolean;\n } {\n let match = value.match(this.regex);\n if (isNullish(match)) {\n throw new DateFormatException(\"Not an IfcTime: \" + value);\n }\n let [\n wholeString,\n hours,\n minutes,\n seconds,\n fractionSeconds,\n timeZoneWhole,\n timeZoneSign,\n timeZoneHours,\n timeZoneMinutes,\n ] = match;\n const utcDate = new Date(0);\n utcDate.setUTCHours(Number.parseInt(hours));\n utcDate.setUTCMinutes(Number.parseInt(minutes));\n utcDate.setUTCSeconds(Number.parseInt(seconds));\n const secondFraction = isNullish(fractionSeconds)\n ? new Decimal(\"0\")\n : new Decimal(\"0\" + fractionSeconds); //arbitrary precision fractions\n const originalZoneSign = isNullish(timeZoneSign)\n ? 0\n : timeZoneSign === \"+\"\n ? 1\n : -1;\n const originalTimeZoneHours =\n originalZoneSign *\n (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));\n const originalTimeZoneMinutes =\n originalZoneSign *\n (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));\n const isLocal = isNullish(timeZoneWhole);\n utcDate.setUTCHours(utcDate.getUTCHours() - originalTimeZoneHours);\n utcDate.setUTCMinutes(utcDate.getUTCMinutes() - originalTimeZoneMinutes);\n return {\n utcDate,\n secondFraction,\n originalTimeZoneHours,\n originalTimeZoneMinutes,\n isLocal,\n };\n }\n\n public static of(value: string): IfcTimeValue {\n return new IfcTimeValue(value);\n }\n\n getValue(): IfcTimeValue {\n return this;\n }\n\n getType(): ExprType {\n return Type.IFC_TIME;\n }\n\n static isIfcTimeValueType(arg: any): arg is IfcTimeValue {\n return (\n arg instanceof IfcTimeValue ||\n (!isNullish(arg.stringRepresentation) &&\n !isNullish(arg.stringRepresentation.match(IfcTimeValue.regex)))\n );\n }\n\n public static isValidStringRepresentation(str: string): boolean {\n return this.regex.test(str);\n }\n\n equals(other: Value<any>): boolean {\n return (\n IfcTimeValue.isIfcTimeValueType(other) &&\n this.utcDateValue.getTime() === other.utcDateValue.getTime() &&\n this.secondFraction.eq(other.secondFraction)\n );\n }\n\n toString(): string {\n return this.stringRepresentation;\n }\n\n compareTo(other: IfcTimeValue): number {\n var diff = this.utcDateValue.getTime() - other.utcDateValue.getTime();\n if (diff != 0) {\n return diff;\n }\n var diffD = this.secondFraction.minus(other.secondFraction);\n if (diffD.isZero()) {\n return 0;\n }\n if (diffD.lt(0)) {\n return -1;\n }\n return 1;\n }\n}\n"]}
|
|
@@ -9,32 +9,36 @@ export class IfcDateTimeValue {
|
|
|
9
9
|
constructor(value) {
|
|
10
10
|
if (typeof value === "string") {
|
|
11
11
|
var parsed = IfcDateTimeValue.parseIfcDate(value);
|
|
12
|
-
this.
|
|
12
|
+
this.utcDate = parsed.utcDate;
|
|
13
13
|
this.originalTimeZoneHours = parsed.originalTimeZoneHours;
|
|
14
14
|
this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;
|
|
15
15
|
this.secondFraction = parsed.secondFraction;
|
|
16
|
+
this.isLocal = parsed.isLocal;
|
|
16
17
|
}
|
|
17
18
|
else if (typeof value === "number" || value instanceof Decimal) {
|
|
18
19
|
let timeStampSeconds = value;
|
|
19
20
|
if (value instanceof Decimal) {
|
|
20
21
|
timeStampSeconds = value.round().toNumber();
|
|
21
22
|
}
|
|
22
|
-
this.
|
|
23
|
+
this.utcDate = new Date(timeStampSeconds);
|
|
23
24
|
this.originalTimeZoneHours = 0;
|
|
24
25
|
this.originalTimeZoneMinutes = 0;
|
|
25
26
|
this.secondFraction = new Decimal(0);
|
|
27
|
+
this.isLocal = false;
|
|
26
28
|
}
|
|
27
29
|
else if (value instanceof IfcDateTimeValue) {
|
|
28
|
-
this.
|
|
30
|
+
this.utcDate = value.utcDate;
|
|
29
31
|
this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;
|
|
30
32
|
this.originalTimeZoneHours = value.originalTimeZoneHours;
|
|
31
33
|
this.secondFraction = value.secondFraction;
|
|
34
|
+
this.isLocal = value.isLocal;
|
|
32
35
|
}
|
|
33
36
|
else if (isParsedIfcDateTimeValue(value)) {
|
|
34
|
-
this.
|
|
37
|
+
this.utcDate = value.utcDate;
|
|
35
38
|
this.secondFraction = value.secondFraction;
|
|
36
39
|
this.originalTimeZoneHours = value.originalTimeZoneHours;
|
|
37
40
|
this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;
|
|
41
|
+
this.isLocal = value.isLocal;
|
|
38
42
|
}
|
|
39
43
|
this.stringRepresentation = this.toCanonicalString();
|
|
40
44
|
}
|
|
@@ -52,18 +56,19 @@ export class IfcDateTimeValue {
|
|
|
52
56
|
utcDate.setUTCHours(Number.parseInt(hours));
|
|
53
57
|
utcDate.setUTCMinutes(Number.parseInt(minutes));
|
|
54
58
|
utcDate.setUTCSeconds(Number.parseInt(seconds));
|
|
55
|
-
|
|
59
|
+
const secondFraction = isNullish(fractionSeconds)
|
|
56
60
|
? new Decimal("0")
|
|
57
61
|
: new Decimal("0" + fractionSeconds); //arbitrary precision fractions (to the precision of Decimal.precision)
|
|
58
|
-
|
|
62
|
+
const originalZoneSign = isNullish(timeZoneSign)
|
|
59
63
|
? 0
|
|
60
64
|
: timeZoneSign === "+"
|
|
61
65
|
? 1
|
|
62
66
|
: -1;
|
|
63
|
-
|
|
67
|
+
const originalTimeZoneHours = originalZoneSign *
|
|
64
68
|
(isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));
|
|
65
|
-
|
|
69
|
+
const originalTimeZoneMinutes = originalZoneSign *
|
|
66
70
|
(isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));
|
|
71
|
+
const isLocal = isNullish(timeZoneWhole);
|
|
67
72
|
utcDate.setUTCHours(utcDate.getUTCHours() - originalTimeZoneHours);
|
|
68
73
|
utcDate.setUTCMinutes(utcDate.getUTCMinutes() - originalTimeZoneMinutes);
|
|
69
74
|
return {
|
|
@@ -71,6 +76,7 @@ export class IfcDateTimeValue {
|
|
|
71
76
|
secondFraction,
|
|
72
77
|
originalTimeZoneHours,
|
|
73
78
|
originalTimeZoneMinutes,
|
|
79
|
+
isLocal,
|
|
74
80
|
};
|
|
75
81
|
}
|
|
76
82
|
static of(value) {
|
|
@@ -82,15 +88,18 @@ export class IfcDateTimeValue {
|
|
|
82
88
|
: this.secondFraction.isZero()
|
|
83
89
|
? ""
|
|
84
90
|
: this.secondFraction.toString().substring(1);
|
|
85
|
-
return `${this.pad00(this.
|
|
91
|
+
return `${this.pad00(this.utcDate.getUTCHours() + this.originalTimeZoneHours)}:${this.pad00(this.utcDate.getUTCMinutes() + this.originalTimeZoneMinutes)}:${this.pad00(this.utcDate.getUTCSeconds())}${fraction}`;
|
|
86
92
|
}
|
|
87
93
|
pad00(num) {
|
|
88
94
|
return ("" + num).padStart(2, "0");
|
|
89
95
|
}
|
|
90
96
|
getDateAsString() {
|
|
91
|
-
return `${this.
|
|
97
|
+
return `${this.utcDate.getUTCFullYear()}-${this.pad00(this.utcDate.getUTCMonth() + 1)}-${this.pad00(this.utcDate.getUTCDate())}`;
|
|
92
98
|
}
|
|
93
99
|
getTimeZoneAsString() {
|
|
100
|
+
if (this.isLocal) {
|
|
101
|
+
return "";
|
|
102
|
+
}
|
|
94
103
|
if (this.originalTimeZoneMinutes === 0 &&
|
|
95
104
|
this.originalTimeZoneHours === 0) {
|
|
96
105
|
return "Z";
|
|
@@ -101,7 +110,14 @@ export class IfcDateTimeValue {
|
|
|
101
110
|
return `${sign}${this.pad00(Math.abs(this.originalTimeZoneHours))}:${this.pad00(Math.abs(this.originalTimeZoneMinutes))}`;
|
|
102
111
|
}
|
|
103
112
|
getTimeStampSeconds() {
|
|
104
|
-
|
|
113
|
+
const offset = this.isLocal ? new Date().getTimezoneOffset() * 60 : 0;
|
|
114
|
+
return new Decimal(this.utcDate.getTime()).divToInt(1000).minus(offset);
|
|
115
|
+
}
|
|
116
|
+
getTime() {
|
|
117
|
+
const offset = this.isLocal ? new Date().getTimezoneOffset() * 60 : 0;
|
|
118
|
+
return new Decimal(this.utcDate.getTime())
|
|
119
|
+
.minus(offset)
|
|
120
|
+
.plus(this.secondFraction);
|
|
105
121
|
}
|
|
106
122
|
getValue() {
|
|
107
123
|
return this;
|
|
@@ -119,8 +135,7 @@ export class IfcDateTimeValue {
|
|
|
119
135
|
}
|
|
120
136
|
equals(other) {
|
|
121
137
|
return (IfcDateTimeValue.isIfcDateTimeValueType(other) &&
|
|
122
|
-
this.
|
|
123
|
-
this.secondFraction.eq(other.secondFraction));
|
|
138
|
+
this.getTime().eq(other.getTime()));
|
|
124
139
|
}
|
|
125
140
|
toCanonicalString() {
|
|
126
141
|
return (this.getDateAsString() +
|
|
@@ -132,11 +147,7 @@ export class IfcDateTimeValue {
|
|
|
132
147
|
return this.stringRepresentation;
|
|
133
148
|
}
|
|
134
149
|
compareTo(other) {
|
|
135
|
-
|
|
136
|
-
if (diff != 0) {
|
|
137
|
-
return diff;
|
|
138
|
-
}
|
|
139
|
-
return Decimal.sign(this.secondFraction.minus(other.secondFraction));
|
|
150
|
+
return Decimal.sign(this.getTime().minus(other.getTime()));
|
|
140
151
|
}
|
|
141
152
|
static ofTimeStampSeconds(timeStampSeconds) {
|
|
142
153
|
var timeStampMillis = timeStampSeconds;
|
|
@@ -156,7 +167,7 @@ export class IfcDateTimeValue {
|
|
|
156
167
|
return IfcTimeStampValue.of(this.getTimeStampSeconds());
|
|
157
168
|
}
|
|
158
169
|
addDuration(duration) {
|
|
159
|
-
const resultDate = new Date(this.
|
|
170
|
+
const resultDate = new Date(this.utcDate.getTime());
|
|
160
171
|
const accumulatedFractions = this.secondFraction.add(duration.getFractionAsSeconds());
|
|
161
172
|
const newSecondFraction = accumulatedFractions.minus(accumulatedFractions.divToInt(1));
|
|
162
173
|
resultDate.setUTCSeconds(resultDate.getUTCSeconds() + accumulatedFractions.divToInt(1).toNumber());
|
|
@@ -173,6 +184,7 @@ export class IfcDateTimeValue {
|
|
|
173
184
|
secondFraction: newSecondFraction,
|
|
174
185
|
originalTimeZoneHours: this.originalTimeZoneHours,
|
|
175
186
|
originalTimeZoneMinutes: this.originalTimeZoneMinutes,
|
|
187
|
+
isLocal: this.isLocal,
|
|
176
188
|
});
|
|
177
189
|
}
|
|
178
190
|
}
|
|
@@ -181,6 +193,7 @@ export function isParsedIfcDateTimeValue(arg) {
|
|
|
181
193
|
return (!isNullish(arg.utcDate) &&
|
|
182
194
|
!isNullish(arg.secondFraction) &&
|
|
183
195
|
!isNullish(arg.originalTimeZoneHours) &&
|
|
184
|
-
!isNullish(arg.originalTimeZoneMinutes)
|
|
196
|
+
!isNullish(arg.originalTimeZoneMinutes) &&
|
|
197
|
+
!isNullish(arg.isLocal));
|
|
185
198
|
}
|
|
186
199
|
//# sourceMappingURL=IfcDateTimeValue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["value/IfcDateTimeValue.ts"],"names":[],"mappings":"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","file":"value/IfcDateTimeValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { Comparable } from \"./Comparable.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { DateFormatException } from \"../error/value/DateFormatException.js\";\nimport Decimal from \"decimal.js\";\nimport { IfcDateValue } from \"./IfcDateValue.js\";\nimport { IfcTimeValue } from \"./IfcTimeValue.js\";\nimport { IfcTimeStampValue } from \"./IfcTimeStampValue.js\";\nimport { IfcDurationValue } from \"./IfcDurationValue.js\";\n\nexport class IfcDateTimeValue\n implements Value<IfcDateTimeValue>, Comparable<IfcDateTimeValue>\n{\n private readonly utcDateValue: Date;\n private readonly stringRepresentation;\n private readonly originalTimeZoneHours: number; // hours ahead of (+) or behind (-) UTC\n private readonly originalTimeZoneMinutes: number; // minutes ahead of (+) or behind (-) UTC\n private readonly secondFraction: Decimal;\n private static readonly regex =\n /^([+\\-]?(?:[1-9]\\d*)?\\d{4}(?<!0000))-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|(?<=23:59:)60)(\\.\\d+)?(Z|([+\\-])(0[0-9]|1[0-2])(?::?([0-5][0-9]))?)?$/;\n\n constructor(\n value: string | number | Decimal | IfcDateTimeValue | ParsedIfcDateTimeValue\n ) {\n if (typeof value === \"string\") {\n var parsed = IfcDateTimeValue.parseIfcDate(value);\n this.utcDateValue = parsed.utcDate;\n this.originalTimeZoneHours = parsed.originalTimeZoneHours;\n this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;\n this.secondFraction = parsed.secondFraction;\n } else if (typeof value === \"number\" || value instanceof Decimal) {\n let timeStampSeconds = value;\n if (value instanceof Decimal) {\n timeStampSeconds = (value as Decimal).round().toNumber();\n }\n this.utcDateValue = new Date(timeStampSeconds as number);\n this.originalTimeZoneHours = 0;\n this.originalTimeZoneMinutes = 0;\n this.secondFraction = new Decimal(0);\n } else if (value instanceof IfcDateTimeValue) {\n this.utcDateValue = value.utcDateValue;\n this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;\n this.originalTimeZoneHours = value.originalTimeZoneHours;\n this.secondFraction = value.secondFraction;\n } else if (isParsedIfcDateTimeValue(value)) {\n this.utcDateValue = value.utcDate;\n this.secondFraction = value.secondFraction;\n this.originalTimeZoneHours = value.originalTimeZoneHours;\n this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;\n }\n this.stringRepresentation = this.toCanonicalString();\n }\n\n public static parseIfcDate(value: string): ParsedIfcDateTimeValue {\n Decimal.set({ defaults: true });\n let match = value.match(this.regex);\n if (isNullish(match)) {\n throw new DateFormatException(\"Not an IfcDateTime: \" + value);\n }\n let [\n wholeString,\n year,\n month,\n day,\n hours,\n minutes,\n seconds,\n fractionSeconds,\n timeZoneWhole,\n timeZoneSign,\n timeZoneHours,\n timeZoneMinutes,\n ] = match;\n var utcDate = new Date(0);\n utcDate.setUTCFullYear(Number.parseInt(year));\n utcDate.setUTCMonth(Number.parseInt(month) - 1);\n utcDate.setUTCDate(Number.parseInt(day));\n utcDate.setUTCHours(Number.parseInt(hours));\n utcDate.setUTCMinutes(Number.parseInt(minutes));\n utcDate.setUTCSeconds(Number.parseInt(seconds));\n var secondFraction = isNullish(fractionSeconds)\n ? new Decimal(\"0\")\n : new Decimal(\"0\" + fractionSeconds); //arbitrary precision fractions (to the precision of Decimal.precision)\n var originalZoneSign = isNullish(timeZoneSign)\n ? 0\n : timeZoneSign === \"+\"\n ? 1\n : -1;\n var originalTimeZoneHours =\n originalZoneSign *\n (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));\n var originalTimeZoneMinutes =\n originalZoneSign *\n (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));\n utcDate.setUTCHours(utcDate.getUTCHours() - originalTimeZoneHours);\n utcDate.setUTCMinutes(utcDate.getUTCMinutes() - originalTimeZoneMinutes);\n return {\n utcDate,\n secondFraction,\n originalTimeZoneHours,\n originalTimeZoneMinutes,\n };\n }\n\n public static of(value: string): IfcDateTimeValue {\n return new IfcDateTimeValue(value);\n }\n\n private getTimeAsString() {\n const fraction = isNullish(this.secondFraction)\n ? \"\"\n : this.secondFraction.isZero()\n ? \"\"\n : this.secondFraction.toString().substring(1);\n return `${this.pad00(\n this.utcDateValue.getUTCHours() + this.originalTimeZoneHours\n )}:${this.pad00(\n this.utcDateValue.getUTCMinutes() + this.originalTimeZoneMinutes\n )}:${this.pad00(this.utcDateValue.getUTCSeconds())}${fraction}`;\n }\n\n private pad00(num: number): string {\n return (\"\" + num).padStart(2, \"0\");\n }\n\n private getDateAsString() {\n return `${this.utcDateValue.getUTCFullYear()}-${this.pad00(\n this.utcDateValue.getUTCMonth() + 1\n )}-${this.pad00(this.utcDateValue.getUTCDate())}`;\n }\n\n getTimeZoneAsString(): String {\n if (\n this.originalTimeZoneMinutes === 0 &&\n this.originalTimeZoneHours === 0\n ) {\n return \"Z\";\n }\n const sign =\n this.originalTimeZoneHours >= 0 && this.originalTimeZoneMinutes >= 0\n ? \"+\"\n : \"-\";\n return `${sign}${this.pad00(\n Math.abs(this.originalTimeZoneHours)\n )}:${this.pad00(Math.abs(this.originalTimeZoneMinutes))}`;\n }\n\n private getTimeStampSeconds(): Decimal {\n return new Decimal(this.utcDateValue.getTime()).divToInt(1000);\n }\n\n getValue(): IfcDateTimeValue {\n return this;\n }\n\n getType(): ExprType {\n return Type.IFC_DATE_TIME;\n }\n\n static isIfcDateTimeValueType(arg: any): arg is IfcDateTimeValue {\n return (\n arg instanceof IfcDateTimeValue ||\n (!isNullish(arg.stringRepresentation) &&\n !isNullish(arg.stringRepresentation.match(IfcDateTimeValue.regex)))\n );\n }\n\n public static isValidStringRepresentation(str: string): boolean {\n return this.regex.test(str);\n }\n\n equals(other: Value<any>): boolean {\n return (\n IfcDateTimeValue.isIfcDateTimeValueType(other) &&\n this.utcDateValue.getTime() === other.utcDateValue.getTime() &&\n this.secondFraction.eq(other.secondFraction)\n );\n }\n\n private toCanonicalString(): string {\n return (\n this.getDateAsString() +\n \"T\" +\n this.getTimeAsString() +\n this.getTimeZoneAsString()\n );\n }\n\n toString(): string {\n return this.stringRepresentation;\n }\n\n compareTo(other: IfcDateTimeValue): number {\n var diff = this.utcDateValue.getTime() - other.utcDateValue.getTime();\n if (diff != 0) {\n return diff;\n }\n return Decimal.sign(this.secondFraction.minus(other.secondFraction));\n }\n\n static ofTimeStampSeconds(timeStampSeconds: Decimal | number) {\n var timeStampMillis = timeStampSeconds;\n if (timeStampSeconds instanceof Decimal) {\n timeStampMillis = timeStampSeconds.round().toNumber();\n }\n timeStampMillis = (timeStampMillis as number) * 1000;\n return new IfcDateTimeValue(timeStampMillis);\n }\n\n toIfcDateValue(): IfcDateValue {\n return IfcDateValue.of(this.getDateAsString() + this.getTimeZoneAsString());\n }\n\n toIfcTimeValue(): IfcTimeValue {\n return IfcTimeValue.of(this.getTimeAsString() + this.getTimeZoneAsString());\n }\n\n toIfcTimeStampValue(): IfcTimeStampValue {\n return IfcTimeStampValue.of(this.getTimeStampSeconds());\n }\n\n addDuration(duration: IfcDurationValue): IfcDateTimeValue {\n const resultDate = new Date(this.utcDateValue.getTime());\n const accumulatedFractions = this.secondFraction.add(\n duration.getFractionAsSeconds()\n );\n const newSecondFraction = accumulatedFractions.minus(\n accumulatedFractions.divToInt(1)\n );\n resultDate.setUTCSeconds(\n resultDate.getUTCSeconds() + accumulatedFractions.divToInt(1).toNumber()\n );\n resultDate.setUTCSeconds(\n resultDate.getUTCSeconds() + duration.getSeconds().divToInt(1).toNumber()\n );\n resultDate.setUTCMinutes(\n resultDate.getUTCMinutes() + duration.getMinutes().divToInt(1).toNumber()\n );\n resultDate.setUTCHours(\n resultDate.getUTCHours() + duration.getHours().divToInt(1).toNumber()\n );\n resultDate.setUTCDate(\n resultDate.getUTCDate() + duration.getDays().divToInt(1).toNumber()\n );\n resultDate.setUTCDate(\n resultDate.getUTCDate() +\n duration.getWeeks().divToInt(1).times(7).toNumber()\n );\n resultDate.setUTCMonth(\n resultDate.getUTCMonth() + duration.getMonths().divToInt(1).toNumber()\n );\n resultDate.setUTCFullYear(\n resultDate.getUTCFullYear() + duration.getYears().divToInt(1).toNumber()\n );\n return new IfcDateTimeValue({\n utcDate: resultDate,\n secondFraction: newSecondFraction,\n originalTimeZoneHours: this.originalTimeZoneHours,\n originalTimeZoneMinutes: this.originalTimeZoneMinutes,\n });\n }\n}\n\nexport type ParsedIfcDateTimeValue = {\n utcDate: Date;\n secondFraction: Decimal;\n originalTimeZoneHours?: number;\n originalTimeZoneMinutes?: number;\n};\n\nexport function isParsedIfcDateTimeValue(\n arg: any\n): arg is ParsedIfcDateTimeValue {\n return (\n !isNullish(arg.utcDate) &&\n !isNullish(arg.secondFraction) &&\n !isNullish(arg.originalTimeZoneHours) &&\n !isNullish(arg.originalTimeZoneMinutes)\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["value/IfcDateTimeValue.ts"],"names":[],"mappings":"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","file":"value/IfcDateTimeValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { Comparable } from \"./Comparable.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { DateFormatException } from \"../error/value/DateFormatException.js\";\nimport Decimal from \"decimal.js\";\nimport { IfcDateValue } from \"./IfcDateValue.js\";\nimport { IfcTimeValue } from \"./IfcTimeValue.js\";\nimport { IfcTimeStampValue } from \"./IfcTimeStampValue.js\";\nimport { IfcDurationValue } from \"./IfcDurationValue.js\";\n\nexport class IfcDateTimeValue\n implements Value<IfcDateTimeValue>, Comparable<IfcDateTimeValue>\n{\n private readonly utcDate: Date;\n private readonly stringRepresentation;\n private readonly originalTimeZoneHours: number; // hours ahead of (+) or behind (-) UTC\n private readonly originalTimeZoneMinutes: number; // minutes ahead of (+) or behind (-) UTC\n private readonly isLocal: boolean;\n private readonly secondFraction: Decimal;\n private static readonly regex =\n /^([+\\-]?(?:[1-9]\\d*)?\\d{4}(?<!0000))-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|(?<=23:59:)60)(\\.\\d+)?(Z|([+\\-])(0[0-9]|1[0-2])(?::?([0-5][0-9]))?)?$/;\n\n constructor(\n value: string | number | Decimal | IfcDateTimeValue | ParsedIfcDateTimeValue\n ) {\n if (typeof value === \"string\") {\n var parsed = IfcDateTimeValue.parseIfcDate(value);\n this.utcDate = parsed.utcDate;\n this.originalTimeZoneHours = parsed.originalTimeZoneHours;\n this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;\n this.secondFraction = parsed.secondFraction;\n this.isLocal = parsed.isLocal;\n } else if (typeof value === \"number\" || value instanceof Decimal) {\n let timeStampSeconds = value;\n if (value instanceof Decimal) {\n timeStampSeconds = (value as Decimal).round().toNumber();\n }\n this.utcDate = new Date(timeStampSeconds as number);\n this.originalTimeZoneHours = 0;\n this.originalTimeZoneMinutes = 0;\n this.secondFraction = new Decimal(0);\n this.isLocal = false;\n } else if (value instanceof IfcDateTimeValue) {\n this.utcDate = value.utcDate;\n this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;\n this.originalTimeZoneHours = value.originalTimeZoneHours;\n this.secondFraction = value.secondFraction;\n this.isLocal = value.isLocal;\n } else if (isParsedIfcDateTimeValue(value)) {\n this.utcDate = value.utcDate;\n this.secondFraction = value.secondFraction;\n this.originalTimeZoneHours = value.originalTimeZoneHours;\n this.originalTimeZoneMinutes = value.originalTimeZoneMinutes;\n this.isLocal = value.isLocal;\n }\n this.stringRepresentation = this.toCanonicalString();\n }\n\n public static parseIfcDate(value: string): ParsedIfcDateTimeValue {\n Decimal.set({ defaults: true });\n let match = value.match(this.regex);\n if (isNullish(match)) {\n throw new DateFormatException(\"Not an IfcDateTime: \" + value);\n }\n let [\n wholeString,\n year,\n month,\n day,\n hours,\n minutes,\n seconds,\n fractionSeconds,\n timeZoneWhole,\n timeZoneSign,\n timeZoneHours,\n timeZoneMinutes,\n ] = match;\n var utcDate = new Date(0);\n utcDate.setUTCFullYear(Number.parseInt(year));\n utcDate.setUTCMonth(Number.parseInt(month) - 1);\n utcDate.setUTCDate(Number.parseInt(day));\n utcDate.setUTCHours(Number.parseInt(hours));\n utcDate.setUTCMinutes(Number.parseInt(minutes));\n utcDate.setUTCSeconds(Number.parseInt(seconds));\n const secondFraction = isNullish(fractionSeconds)\n ? new Decimal(\"0\")\n : new Decimal(\"0\" + fractionSeconds); //arbitrary precision fractions (to the precision of Decimal.precision)\n const originalZoneSign = isNullish(timeZoneSign)\n ? 0\n : timeZoneSign === \"+\"\n ? 1\n : -1;\n const originalTimeZoneHours =\n originalZoneSign *\n (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));\n const originalTimeZoneMinutes =\n originalZoneSign *\n (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));\n const isLocal = isNullish(timeZoneWhole);\n utcDate.setUTCHours(utcDate.getUTCHours() - originalTimeZoneHours);\n utcDate.setUTCMinutes(utcDate.getUTCMinutes() - originalTimeZoneMinutes);\n return {\n utcDate,\n secondFraction,\n originalTimeZoneHours,\n originalTimeZoneMinutes,\n isLocal,\n };\n }\n\n public static of(value: string): IfcDateTimeValue {\n return new IfcDateTimeValue(value);\n }\n\n private getTimeAsString() {\n const fraction = isNullish(this.secondFraction)\n ? \"\"\n : this.secondFraction.isZero()\n ? \"\"\n : this.secondFraction.toString().substring(1);\n return `${this.pad00(\n this.utcDate.getUTCHours() + this.originalTimeZoneHours\n )}:${this.pad00(\n this.utcDate.getUTCMinutes() + this.originalTimeZoneMinutes\n )}:${this.pad00(this.utcDate.getUTCSeconds())}${fraction}`;\n }\n\n private pad00(num: number): string {\n return (\"\" + num).padStart(2, \"0\");\n }\n\n private getDateAsString() {\n return `${this.utcDate.getUTCFullYear()}-${this.pad00(\n this.utcDate.getUTCMonth() + 1\n )}-${this.pad00(this.utcDate.getUTCDate())}`;\n }\n\n getTimeZoneAsString(): String {\n if (this.isLocal) {\n return \"\";\n }\n if (\n this.originalTimeZoneMinutes === 0 &&\n this.originalTimeZoneHours === 0\n ) {\n return \"Z\";\n }\n const sign =\n this.originalTimeZoneHours >= 0 && this.originalTimeZoneMinutes >= 0\n ? \"+\"\n : \"-\";\n return `${sign}${this.pad00(\n Math.abs(this.originalTimeZoneHours)\n )}:${this.pad00(Math.abs(this.originalTimeZoneMinutes))}`;\n }\n\n private getTimeStampSeconds(): Decimal {\n const offset = this.isLocal ? new Date().getTimezoneOffset() * 60 : 0;\n return new Decimal(this.utcDate.getTime()).divToInt(1000).minus(offset);\n }\n\n private getTime(): Decimal {\n const offset = this.isLocal ? new Date().getTimezoneOffset() * 60 : 0;\n return new Decimal(this.utcDate.getTime())\n .minus(offset)\n .plus(this.secondFraction);\n }\n\n getValue(): IfcDateTimeValue {\n return this;\n }\n\n getType(): ExprType {\n return Type.IFC_DATE_TIME;\n }\n\n static isIfcDateTimeValueType(arg: any): arg is IfcDateTimeValue {\n return (\n arg instanceof IfcDateTimeValue ||\n (!isNullish(arg.stringRepresentation) &&\n !isNullish(arg.stringRepresentation.match(IfcDateTimeValue.regex)))\n );\n }\n\n public static isValidStringRepresentation(str: string): boolean {\n return this.regex.test(str);\n }\n\n equals(other: Value<any>): boolean {\n return (\n IfcDateTimeValue.isIfcDateTimeValueType(other) &&\n this.getTime().eq(other.getTime())\n );\n }\n\n private toCanonicalString(): string {\n return (\n this.getDateAsString() +\n \"T\" +\n this.getTimeAsString() +\n this.getTimeZoneAsString()\n );\n }\n\n toString(): string {\n return this.stringRepresentation;\n }\n\n compareTo(other: IfcDateTimeValue): number {\n return Decimal.sign(this.getTime().minus(other.getTime()));\n }\n\n static ofTimeStampSeconds(timeStampSeconds: Decimal | number) {\n var timeStampMillis = timeStampSeconds;\n if (timeStampSeconds instanceof Decimal) {\n timeStampMillis = timeStampSeconds.round().toNumber();\n }\n timeStampMillis = (timeStampMillis as number) * 1000;\n return new IfcDateTimeValue(timeStampMillis);\n }\n\n toIfcDateValue(): IfcDateValue {\n return IfcDateValue.of(this.getDateAsString() + this.getTimeZoneAsString());\n }\n\n toIfcTimeValue(): IfcTimeValue {\n return IfcTimeValue.of(this.getTimeAsString() + this.getTimeZoneAsString());\n }\n\n toIfcTimeStampValue(): IfcTimeStampValue {\n return IfcTimeStampValue.of(this.getTimeStampSeconds());\n }\n\n addDuration(duration: IfcDurationValue): IfcDateTimeValue {\n const resultDate = new Date(this.utcDate.getTime());\n const accumulatedFractions = this.secondFraction.add(\n duration.getFractionAsSeconds()\n );\n const newSecondFraction = accumulatedFractions.minus(\n accumulatedFractions.divToInt(1)\n );\n resultDate.setUTCSeconds(\n resultDate.getUTCSeconds() + accumulatedFractions.divToInt(1).toNumber()\n );\n resultDate.setUTCSeconds(\n resultDate.getUTCSeconds() + duration.getSeconds().divToInt(1).toNumber()\n );\n resultDate.setUTCMinutes(\n resultDate.getUTCMinutes() + duration.getMinutes().divToInt(1).toNumber()\n );\n resultDate.setUTCHours(\n resultDate.getUTCHours() + duration.getHours().divToInt(1).toNumber()\n );\n resultDate.setUTCDate(\n resultDate.getUTCDate() + duration.getDays().divToInt(1).toNumber()\n );\n resultDate.setUTCDate(\n resultDate.getUTCDate() +\n duration.getWeeks().divToInt(1).times(7).toNumber()\n );\n resultDate.setUTCMonth(\n resultDate.getUTCMonth() + duration.getMonths().divToInt(1).toNumber()\n );\n resultDate.setUTCFullYear(\n resultDate.getUTCFullYear() + duration.getYears().divToInt(1).toNumber()\n );\n return new IfcDateTimeValue({\n utcDate: resultDate,\n secondFraction: newSecondFraction,\n originalTimeZoneHours: this.originalTimeZoneHours,\n originalTimeZoneMinutes: this.originalTimeZoneMinutes,\n isLocal: this.isLocal,\n });\n }\n}\n\nexport type ParsedIfcDateTimeValue = {\n utcDate: Date;\n secondFraction: Decimal;\n originalTimeZoneHours?: number;\n originalTimeZoneMinutes?: number;\n isLocal: boolean;\n};\n\nexport function isParsedIfcDateTimeValue(\n arg: any\n): arg is ParsedIfcDateTimeValue {\n return (\n !isNullish(arg.utcDate) &&\n !isNullish(arg.secondFraction) &&\n !isNullish(arg.originalTimeZoneHours) &&\n !isNullish(arg.originalTimeZoneMinutes) &&\n !isNullish(arg.isLocal)\n );\n}\n"]}
|
|
@@ -7,6 +7,7 @@ export class IfcDateValue {
|
|
|
7
7
|
this.utcDateValue = parsed.utcDate;
|
|
8
8
|
this.originalTimeZoneHours = parsed.originalTimeZoneHours;
|
|
9
9
|
this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;
|
|
10
|
+
this.isLocal = parsed.isLocal;
|
|
10
11
|
this.stringRepresentation = value;
|
|
11
12
|
}
|
|
12
13
|
static parseIfcDate(value) {
|
|
@@ -15,22 +16,28 @@ export class IfcDateValue {
|
|
|
15
16
|
throw new DateFormatException("Not an IfcDate: " + value);
|
|
16
17
|
}
|
|
17
18
|
let [wholeString, year, month, day, timeZoneWhole, timeZoneSign, timeZoneHours, timeZoneMinutes,] = match;
|
|
18
|
-
|
|
19
|
+
const utcDate = new Date(0);
|
|
19
20
|
utcDate.setUTCFullYear(Number.parseInt(year));
|
|
20
21
|
utcDate.setUTCMonth(Number.parseInt(month) - 1);
|
|
21
22
|
utcDate.setUTCDate(Number.parseInt(day));
|
|
22
|
-
|
|
23
|
+
const originalZoneSign = isNullish(timeZoneSign)
|
|
23
24
|
? 0
|
|
24
25
|
: timeZoneSign === "+"
|
|
25
26
|
? -1
|
|
26
27
|
: +1; //why? Beause +1 means 1 hour ahead of UTC, so we have to subtract 1 to get UTC
|
|
27
|
-
|
|
28
|
+
const originalTimeZoneHours = originalZoneSign *
|
|
28
29
|
(isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));
|
|
29
|
-
|
|
30
|
+
const originalTimeZoneMinutes = originalZoneSign *
|
|
30
31
|
(isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));
|
|
32
|
+
const isLocal = isNullish(timeZoneWhole);
|
|
31
33
|
utcDate.setUTCHours(utcDate.getUTCHours() + originalTimeZoneHours);
|
|
32
34
|
utcDate.setUTCMinutes(utcDate.getUTCMinutes() + originalTimeZoneMinutes);
|
|
33
|
-
return {
|
|
35
|
+
return {
|
|
36
|
+
utcDate: utcDate,
|
|
37
|
+
originalTimeZoneHours,
|
|
38
|
+
originalTimeZoneMinutes,
|
|
39
|
+
isLocal,
|
|
40
|
+
};
|
|
34
41
|
}
|
|
35
42
|
static of(value) {
|
|
36
43
|
return new IfcDateValue(value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["value/IfcDateValue.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAE5E,MAAM,OAAO,YAAY;
|
|
1
|
+
{"version":3,"sources":["value/IfcDateValue.ts"],"names":[],"mappings":"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","file":"value/IfcDateValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { Comparable } from \"./Comparable.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { DateFormatException } from \"../error/value/DateFormatException.js\";\n\nexport class IfcDateValue\n implements Value<IfcDateValue>, Comparable<IfcDateValue>\n{\n private readonly utcDateValue: Date;\n private readonly stringRepresentation;\n private readonly originalTimeZoneHours: number; // hours ahead of (+) or behind (-) UTC\n private readonly originalTimeZoneMinutes: number; // minutes ahead of (+) or behind (-) UTC\n private readonly isLocal: boolean;\n private static readonly regex =\n /^([+\\-]?(?:[1-9]\\d*)?\\d{4}(?<!0000))-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])(Z|([+\\-])(0[0-9]|1[0-2])(?::?([0-5][0-9]))?)?$/;\n\n constructor(value: string) {\n var parsed = IfcDateValue.parseIfcDate(value);\n this.utcDateValue = parsed.utcDate;\n this.originalTimeZoneHours = parsed.originalTimeZoneHours;\n this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;\n this.isLocal = parsed.isLocal;\n this.stringRepresentation = value;\n }\n\n public static parseIfcDate(value: string): {\n utcDate: Date;\n originalTimeZoneHours?: number;\n originalTimeZoneMinutes?: number;\n isLocal: boolean;\n } {\n let match = value.match(this.regex);\n if (isNullish(match)) {\n throw new DateFormatException(\"Not an IfcDate: \" + value);\n }\n let [\n wholeString,\n year,\n month,\n day,\n timeZoneWhole,\n timeZoneSign,\n timeZoneHours,\n timeZoneMinutes,\n ] = match;\n const utcDate = new Date(0);\n utcDate.setUTCFullYear(Number.parseInt(year));\n utcDate.setUTCMonth(Number.parseInt(month) - 1);\n utcDate.setUTCDate(Number.parseInt(day));\n const originalZoneSign = isNullish(timeZoneSign)\n ? 0\n : timeZoneSign === \"+\"\n ? -1\n : +1; //why? Beause +1 means 1 hour ahead of UTC, so we have to subtract 1 to get UTC\n const originalTimeZoneHours =\n originalZoneSign *\n (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));\n const originalTimeZoneMinutes =\n originalZoneSign *\n (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));\n const isLocal = isNullish(timeZoneWhole);\n utcDate.setUTCHours(utcDate.getUTCHours() + originalTimeZoneHours);\n utcDate.setUTCMinutes(utcDate.getUTCMinutes() + originalTimeZoneMinutes);\n return {\n utcDate: utcDate,\n originalTimeZoneHours,\n originalTimeZoneMinutes,\n isLocal,\n };\n }\n\n public static of(value: string): IfcDateValue {\n return new IfcDateValue(value);\n }\n\n getValue(): IfcDateValue {\n return this;\n }\n\n getType(): ExprType {\n return Type.IFC_DATE;\n }\n\n static isIfcDateValueType(arg: any): arg is IfcDateValue {\n return (\n arg instanceof IfcDateValue ||\n (!isNullish(arg.stringRepresentation) &&\n !isNullish(arg.stringRepresentation.match(IfcDateValue.regex)))\n );\n }\n\n public static isValidStringRepresentation(str: string): boolean {\n return this.regex.test(str);\n }\n\n equals(other: Value<any>): boolean {\n return (\n IfcDateValue.isIfcDateValueType(other) &&\n this.utcDateValue.getTime() === other.utcDateValue.getTime()\n );\n }\n\n toString(): string {\n return this.stringRepresentation;\n }\n\n compareTo(other: IfcDateValue): number {\n return this.utcDateValue.getTime() - other.utcDateValue.getTime();\n }\n}\n"]}
|
|
@@ -9,6 +9,7 @@ export class IfcTimeValue {
|
|
|
9
9
|
this.originalTimeZoneHours = parsed.originalTimeZoneHours;
|
|
10
10
|
this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;
|
|
11
11
|
this.secondFraction = parsed.secondFraction;
|
|
12
|
+
this.isLocal = parsed.isLocal;
|
|
12
13
|
this.stringRepresentation = value;
|
|
13
14
|
}
|
|
14
15
|
static parseIfcDate(value) {
|
|
@@ -17,22 +18,23 @@ export class IfcTimeValue {
|
|
|
17
18
|
throw new DateFormatException("Not an IfcTime: " + value);
|
|
18
19
|
}
|
|
19
20
|
let [wholeString, hours, minutes, seconds, fractionSeconds, timeZoneWhole, timeZoneSign, timeZoneHours, timeZoneMinutes,] = match;
|
|
20
|
-
|
|
21
|
+
const utcDate = new Date(0);
|
|
21
22
|
utcDate.setUTCHours(Number.parseInt(hours));
|
|
22
23
|
utcDate.setUTCMinutes(Number.parseInt(minutes));
|
|
23
24
|
utcDate.setUTCSeconds(Number.parseInt(seconds));
|
|
24
|
-
|
|
25
|
+
const secondFraction = isNullish(fractionSeconds)
|
|
25
26
|
? new Decimal("0")
|
|
26
27
|
: new Decimal("0" + fractionSeconds); //arbitrary precision fractions
|
|
27
|
-
|
|
28
|
+
const originalZoneSign = isNullish(timeZoneSign)
|
|
28
29
|
? 0
|
|
29
30
|
: timeZoneSign === "+"
|
|
30
31
|
? 1
|
|
31
32
|
: -1;
|
|
32
|
-
|
|
33
|
+
const originalTimeZoneHours = originalZoneSign *
|
|
33
34
|
(isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));
|
|
34
|
-
|
|
35
|
+
const originalTimeZoneMinutes = originalZoneSign *
|
|
35
36
|
(isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));
|
|
37
|
+
const isLocal = isNullish(timeZoneWhole);
|
|
36
38
|
utcDate.setUTCHours(utcDate.getUTCHours() - originalTimeZoneHours);
|
|
37
39
|
utcDate.setUTCMinutes(utcDate.getUTCMinutes() - originalTimeZoneMinutes);
|
|
38
40
|
return {
|
|
@@ -40,6 +42,7 @@ export class IfcTimeValue {
|
|
|
40
42
|
secondFraction,
|
|
41
43
|
originalTimeZoneHours,
|
|
42
44
|
originalTimeZoneMinutes,
|
|
45
|
+
isLocal,
|
|
43
46
|
};
|
|
44
47
|
}
|
|
45
48
|
static of(value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["value/IfcTimeValue.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,OAAO,MAAM,YAAY,CAAC;AAEjC,MAAM,OAAO,YAAY;
|
|
1
|
+
{"version":3,"sources":["value/IfcTimeValue.ts"],"names":[],"mappings":"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","file":"value/IfcTimeValue.js","sourcesContent":["import { Value } from \"./Value.js\";\nimport { Comparable } from \"./Comparable.js\";\nimport { ExprType } from \"../type/ExprType.js\";\nimport { Type } from \"../type/Types.js\";\nimport { isNullish } from \"../util/IfcExpressionUtils.js\";\nimport { DateFormatException } from \"../error/value/DateFormatException.js\";\nimport Decimal from \"decimal.js\";\n\nexport class IfcTimeValue\n implements Value<IfcTimeValue>, Comparable<IfcTimeValue>\n{\n private readonly utcDateValue: Date;\n private readonly stringRepresentation;\n private readonly originalTimeZoneHours: number; // hours ahead of (+) or behind (-) UTC\n private readonly originalTimeZoneMinutes: number; // minutes ahead of (+) or behind (-) UTC\n private readonly isLocal: boolean;\n private readonly secondFraction: Decimal;\n\n private static readonly regex =\n /^([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|(?<=23:59:)60)(\\.\\d+)?(Z|([+\\-])(0[0-9]|1[0-2])(?::?([0-5][0-9]))?)?$/;\n\n constructor(value: string) {\n var parsed = IfcTimeValue.parseIfcDate(value);\n this.utcDateValue = parsed.utcDate;\n this.originalTimeZoneHours = parsed.originalTimeZoneHours;\n this.originalTimeZoneMinutes = parsed.originalTimeZoneMinutes;\n this.secondFraction = parsed.secondFraction;\n this.isLocal = parsed.isLocal;\n this.stringRepresentation = value;\n }\n\n public static parseIfcDate(value: string): {\n utcDate: Date;\n secondFraction: Decimal;\n originalTimeZoneHours?: number;\n originalTimeZoneMinutes?: number;\n isLocal: boolean;\n } {\n let match = value.match(this.regex);\n if (isNullish(match)) {\n throw new DateFormatException(\"Not an IfcTime: \" + value);\n }\n let [\n wholeString,\n hours,\n minutes,\n seconds,\n fractionSeconds,\n timeZoneWhole,\n timeZoneSign,\n timeZoneHours,\n timeZoneMinutes,\n ] = match;\n const utcDate = new Date(0);\n utcDate.setUTCHours(Number.parseInt(hours));\n utcDate.setUTCMinutes(Number.parseInt(minutes));\n utcDate.setUTCSeconds(Number.parseInt(seconds));\n const secondFraction = isNullish(fractionSeconds)\n ? new Decimal(\"0\")\n : new Decimal(\"0\" + fractionSeconds); //arbitrary precision fractions\n const originalZoneSign = isNullish(timeZoneSign)\n ? 0\n : timeZoneSign === \"+\"\n ? 1\n : -1;\n const originalTimeZoneHours =\n originalZoneSign *\n (isNullish(timeZoneHours) ? 0 : Number.parseInt(timeZoneHours));\n const originalTimeZoneMinutes =\n originalZoneSign *\n (isNullish(timeZoneMinutes) ? 0 : Number.parseInt(timeZoneMinutes));\n const isLocal = isNullish(timeZoneWhole);\n utcDate.setUTCHours(utcDate.getUTCHours() - originalTimeZoneHours);\n utcDate.setUTCMinutes(utcDate.getUTCMinutes() - originalTimeZoneMinutes);\n return {\n utcDate,\n secondFraction,\n originalTimeZoneHours,\n originalTimeZoneMinutes,\n isLocal,\n };\n }\n\n public static of(value: string): IfcTimeValue {\n return new IfcTimeValue(value);\n }\n\n getValue(): IfcTimeValue {\n return this;\n }\n\n getType(): ExprType {\n return Type.IFC_TIME;\n }\n\n static isIfcTimeValueType(arg: any): arg is IfcTimeValue {\n return (\n arg instanceof IfcTimeValue ||\n (!isNullish(arg.stringRepresentation) &&\n !isNullish(arg.stringRepresentation.match(IfcTimeValue.regex)))\n );\n }\n\n public static isValidStringRepresentation(str: string): boolean {\n return this.regex.test(str);\n }\n\n equals(other: Value<any>): boolean {\n return (\n IfcTimeValue.isIfcTimeValueType(other) &&\n this.utcDateValue.getTime() === other.utcDateValue.getTime() &&\n this.secondFraction.eq(other.secondFraction)\n );\n }\n\n toString(): string {\n return this.stringRepresentation;\n }\n\n compareTo(other: IfcTimeValue): number {\n var diff = this.utcDateValue.getTime() - other.utcDateValue.getTime();\n if (diff != 0) {\n return diff;\n }\n var diffD = this.secondFraction.minus(other.secondFraction);\n if (diffD.isZero()) {\n return 0;\n }\n if (diffD.lt(0)) {\n return -1;\n }\n return 1;\n }\n}\n"]}
|
|
@@ -7,10 +7,11 @@ import { IfcTimeValue } from "./IfcTimeValue.js";
|
|
|
7
7
|
import { IfcTimeStampValue } from "./IfcTimeStampValue.js";
|
|
8
8
|
import { IfcDurationValue } from "./IfcDurationValue.js";
|
|
9
9
|
export declare class IfcDateTimeValue implements Value<IfcDateTimeValue>, Comparable<IfcDateTimeValue> {
|
|
10
|
-
private readonly
|
|
10
|
+
private readonly utcDate;
|
|
11
11
|
private readonly stringRepresentation;
|
|
12
12
|
private readonly originalTimeZoneHours;
|
|
13
13
|
private readonly originalTimeZoneMinutes;
|
|
14
|
+
private readonly isLocal;
|
|
14
15
|
private readonly secondFraction;
|
|
15
16
|
private static readonly regex;
|
|
16
17
|
constructor(value: string | number | Decimal | IfcDateTimeValue | ParsedIfcDateTimeValue);
|
|
@@ -21,6 +22,7 @@ export declare class IfcDateTimeValue implements Value<IfcDateTimeValue>, Compar
|
|
|
21
22
|
private getDateAsString;
|
|
22
23
|
getTimeZoneAsString(): String;
|
|
23
24
|
private getTimeStampSeconds;
|
|
25
|
+
private getTime;
|
|
24
26
|
getValue(): IfcDateTimeValue;
|
|
25
27
|
getType(): ExprType;
|
|
26
28
|
static isIfcDateTimeValueType(arg: any): arg is IfcDateTimeValue;
|
|
@@ -40,5 +42,6 @@ export type ParsedIfcDateTimeValue = {
|
|
|
40
42
|
secondFraction: Decimal;
|
|
41
43
|
originalTimeZoneHours?: number;
|
|
42
44
|
originalTimeZoneMinutes?: number;
|
|
45
|
+
isLocal: boolean;
|
|
43
46
|
};
|
|
44
47
|
export declare function isParsedIfcDateTimeValue(arg: any): arg is ParsedIfcDateTimeValue;
|
|
@@ -6,12 +6,14 @@ export declare class IfcDateValue implements Value<IfcDateValue>, Comparable<Ifc
|
|
|
6
6
|
private readonly stringRepresentation;
|
|
7
7
|
private readonly originalTimeZoneHours;
|
|
8
8
|
private readonly originalTimeZoneMinutes;
|
|
9
|
+
private readonly isLocal;
|
|
9
10
|
private static readonly regex;
|
|
10
11
|
constructor(value: string);
|
|
11
12
|
static parseIfcDate(value: string): {
|
|
12
13
|
utcDate: Date;
|
|
13
14
|
originalTimeZoneHours?: number;
|
|
14
15
|
originalTimeZoneMinutes?: number;
|
|
16
|
+
isLocal: boolean;
|
|
15
17
|
};
|
|
16
18
|
static of(value: string): IfcDateValue;
|
|
17
19
|
getValue(): IfcDateValue;
|
|
@@ -7,6 +7,7 @@ export declare class IfcTimeValue implements Value<IfcTimeValue>, Comparable<Ifc
|
|
|
7
7
|
private readonly stringRepresentation;
|
|
8
8
|
private readonly originalTimeZoneHours;
|
|
9
9
|
private readonly originalTimeZoneMinutes;
|
|
10
|
+
private readonly isLocal;
|
|
10
11
|
private readonly secondFraction;
|
|
11
12
|
private static readonly regex;
|
|
12
13
|
constructor(value: string);
|
|
@@ -15,6 +16,7 @@ export declare class IfcTimeValue implements Value<IfcTimeValue>, Comparable<Ifc
|
|
|
15
16
|
secondFraction: Decimal;
|
|
16
17
|
originalTimeZoneHours?: number;
|
|
17
18
|
originalTimeZoneMinutes?: number;
|
|
19
|
+
isLocal: boolean;
|
|
18
20
|
};
|
|
19
21
|
static of(value: string): IfcTimeValue;
|
|
20
22
|
getValue(): IfcTimeValue;
|