@spinajs/util 2.0.409 → 2.0.412
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/lib/cjs/args.d.ts +7 -1
- package/lib/cjs/args.d.ts.map +1 -1
- package/lib/cjs/args.js +23 -9
- package/lib/cjs/args.js.map +1 -1
- package/lib/cjs/fp.d.ts +1 -0
- package/lib/cjs/fp.d.ts.map +1 -1
- package/lib/cjs/fp.js +4 -0
- package/lib/cjs/fp.js.map +1 -1
- package/lib/cjs/index.d.ts +1 -0
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +1 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/timespan.d.ts +154 -0
- package/lib/cjs/timespan.d.ts.map +1 -0
- package/lib/cjs/timespan.js +464 -0
- package/lib/cjs/timespan.js.map +1 -0
- package/lib/mjs/args.d.ts +7 -1
- package/lib/mjs/args.d.ts.map +1 -1
- package/lib/mjs/args.js +22 -8
- package/lib/mjs/args.js.map +1 -1
- package/lib/mjs/fp.d.ts +1 -0
- package/lib/mjs/fp.d.ts.map +1 -1
- package/lib/mjs/fp.js +3 -0
- package/lib/mjs/fp.js.map +1 -1
- package/lib/mjs/index.d.ts +1 -0
- package/lib/mjs/index.d.ts.map +1 -1
- package/lib/mjs/index.js +1 -0
- package/lib/mjs/index.js.map +1 -1
- package/lib/mjs/timespan.d.ts +154 -0
- package/lib/mjs/timespan.d.ts.map +1 -0
- package/lib/mjs/timespan.js +460 -0
- package/lib/mjs/timespan.js.map +1 -0
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
import { DateTime } from 'luxon';
|
|
2
|
+
import { _is_number, _non_NaN } from './args.js';
|
|
3
|
+
export class TimeSpan {
|
|
4
|
+
static get TIMEZONE_OFFSET() {
|
|
5
|
+
if (!this._TIMEZONE_OFFSET) {
|
|
6
|
+
this._TIMEZONE_OFFSET = TimeSpan.fromMinutes(new Date().getTimezoneOffset() * -1);
|
|
7
|
+
}
|
|
8
|
+
return TimeSpan._TIMEZONE_OFFSET;
|
|
9
|
+
}
|
|
10
|
+
constructor(millis) {
|
|
11
|
+
this._millis = millis;
|
|
12
|
+
}
|
|
13
|
+
get milliseconds() {
|
|
14
|
+
return TimeSpan.round(this._millis % 1000);
|
|
15
|
+
}
|
|
16
|
+
get seconds() {
|
|
17
|
+
return TimeSpan.round((this._millis / TimeSpan.MILLIS_PER_SECOND) % 60);
|
|
18
|
+
}
|
|
19
|
+
get minutes() {
|
|
20
|
+
return TimeSpan.round((this._millis / TimeSpan.MILLIS_PER_MINUTE) % 60);
|
|
21
|
+
}
|
|
22
|
+
get hours() {
|
|
23
|
+
return TimeSpan.round((this._millis / TimeSpan.MILLIS_PER_HOUR) % 24);
|
|
24
|
+
}
|
|
25
|
+
get days() {
|
|
26
|
+
return TimeSpan.round(this._millis / TimeSpan.MILLIS_PER_DAY);
|
|
27
|
+
}
|
|
28
|
+
get totalDays() {
|
|
29
|
+
return this._millis / TimeSpan.MILLIS_PER_DAY;
|
|
30
|
+
}
|
|
31
|
+
get totalHours() {
|
|
32
|
+
return this._millis / TimeSpan.MILLIS_PER_HOUR;
|
|
33
|
+
}
|
|
34
|
+
get totalMinutes() {
|
|
35
|
+
return this._millis / TimeSpan.MILLIS_PER_MINUTE;
|
|
36
|
+
}
|
|
37
|
+
get totalSeconds() {
|
|
38
|
+
return this._millis / TimeSpan.MILLIS_PER_SECOND;
|
|
39
|
+
}
|
|
40
|
+
get totalMilliseconds() {
|
|
41
|
+
return this._millis;
|
|
42
|
+
}
|
|
43
|
+
add(ts) {
|
|
44
|
+
const result = this._millis + ts.totalMilliseconds;
|
|
45
|
+
return new TimeSpan(result);
|
|
46
|
+
}
|
|
47
|
+
subtract(ts) {
|
|
48
|
+
const result = this._millis - ts.totalMilliseconds;
|
|
49
|
+
return new TimeSpan(result);
|
|
50
|
+
}
|
|
51
|
+
addDays(value) {
|
|
52
|
+
const result = this._millis + value * TimeSpan.MILLIS_PER_DAY;
|
|
53
|
+
return new TimeSpan(result);
|
|
54
|
+
}
|
|
55
|
+
subtractDays(value) {
|
|
56
|
+
const result = this._millis - value * TimeSpan.MILLIS_PER_DAY;
|
|
57
|
+
return new TimeSpan(result);
|
|
58
|
+
}
|
|
59
|
+
addHours(value) {
|
|
60
|
+
const result = this._millis + value * TimeSpan.MILLIS_PER_HOUR;
|
|
61
|
+
return new TimeSpan(result);
|
|
62
|
+
}
|
|
63
|
+
subtractHours(value) {
|
|
64
|
+
const result = this._millis - value * TimeSpan.MILLIS_PER_HOUR;
|
|
65
|
+
return new TimeSpan(result);
|
|
66
|
+
}
|
|
67
|
+
addMinutes(value) {
|
|
68
|
+
const result = this._millis + value * TimeSpan.MILLIS_PER_MINUTE;
|
|
69
|
+
return new TimeSpan(result);
|
|
70
|
+
}
|
|
71
|
+
subtractMinutes(value) {
|
|
72
|
+
const result = this._millis - value * TimeSpan.MILLIS_PER_MINUTE;
|
|
73
|
+
return new TimeSpan(result);
|
|
74
|
+
}
|
|
75
|
+
addSeconds(value) {
|
|
76
|
+
const result = this._millis + value * TimeSpan.MILLIS_PER_SECOND;
|
|
77
|
+
return new TimeSpan(result);
|
|
78
|
+
}
|
|
79
|
+
addMilliseconds(value) {
|
|
80
|
+
const result = this._millis + value;
|
|
81
|
+
return new TimeSpan(result);
|
|
82
|
+
}
|
|
83
|
+
subtractSeconds(value) {
|
|
84
|
+
const result = this._millis - value * TimeSpan.MILLIS_PER_SECOND;
|
|
85
|
+
return new TimeSpan(result);
|
|
86
|
+
}
|
|
87
|
+
subtractMilliseconds(value) {
|
|
88
|
+
const result = this._millis - value;
|
|
89
|
+
return new TimeSpan(result);
|
|
90
|
+
}
|
|
91
|
+
negate() {
|
|
92
|
+
return new TimeSpan(-this._millis);
|
|
93
|
+
}
|
|
94
|
+
equals(value) {
|
|
95
|
+
if (value instanceof TimeSpan) {
|
|
96
|
+
return this._millis === value._millis;
|
|
97
|
+
}
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Compares this TimeSpan with another TimeSpan
|
|
102
|
+
* @returns -1 if this < other, 0 if equal, 1 if this > other
|
|
103
|
+
*/
|
|
104
|
+
compareTo(other) {
|
|
105
|
+
if (this._millis < other._millis)
|
|
106
|
+
return -1;
|
|
107
|
+
if (this._millis > other._millis)
|
|
108
|
+
return 1;
|
|
109
|
+
return 0;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Checks if this TimeSpan is greater than another
|
|
113
|
+
*/
|
|
114
|
+
greaterThan(other) {
|
|
115
|
+
return this._millis > other._millis;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Checks if this TimeSpan is greater than or equal to another
|
|
119
|
+
*/
|
|
120
|
+
greaterThanOrEqual(other) {
|
|
121
|
+
return this._millis >= other._millis;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Checks if this TimeSpan is less than another
|
|
125
|
+
*/
|
|
126
|
+
lessThan(other) {
|
|
127
|
+
return this._millis < other._millis;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Checks if this TimeSpan is less than or equal to another
|
|
131
|
+
*/
|
|
132
|
+
lessThanOrEqual(other) {
|
|
133
|
+
return this._millis <= other._millis;
|
|
134
|
+
}
|
|
135
|
+
isTimeInRange(start, end) {
|
|
136
|
+
let startTime;
|
|
137
|
+
let endTime;
|
|
138
|
+
if (start instanceof Date) {
|
|
139
|
+
// Extract time-of-day in milliseconds since midnight
|
|
140
|
+
const startHours = start.getHours();
|
|
141
|
+
const startMinutes = start.getMinutes();
|
|
142
|
+
const startSeconds = start.getSeconds();
|
|
143
|
+
const startMs = start.getMilliseconds();
|
|
144
|
+
startTime = startHours * TimeSpan.MILLIS_PER_HOUR +
|
|
145
|
+
startMinutes * TimeSpan.MILLIS_PER_MINUTE +
|
|
146
|
+
startSeconds * TimeSpan.MILLIS_PER_SECOND +
|
|
147
|
+
startMs;
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
// Luxon DateTime
|
|
151
|
+
startTime = start.hour * TimeSpan.MILLIS_PER_HOUR +
|
|
152
|
+
start.minute * TimeSpan.MILLIS_PER_MINUTE +
|
|
153
|
+
start.second * TimeSpan.MILLIS_PER_SECOND +
|
|
154
|
+
start.millisecond;
|
|
155
|
+
}
|
|
156
|
+
if (end instanceof Date) {
|
|
157
|
+
const endHours = end.getHours();
|
|
158
|
+
const endMinutes = end.getMinutes();
|
|
159
|
+
const endSeconds = end.getSeconds();
|
|
160
|
+
const endMs = end.getMilliseconds();
|
|
161
|
+
endTime = endHours * TimeSpan.MILLIS_PER_HOUR +
|
|
162
|
+
endMinutes * TimeSpan.MILLIS_PER_MINUTE +
|
|
163
|
+
endSeconds * TimeSpan.MILLIS_PER_SECOND +
|
|
164
|
+
endMs;
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
endTime = end.hour * TimeSpan.MILLIS_PER_HOUR +
|
|
168
|
+
end.minute * TimeSpan.MILLIS_PER_MINUTE +
|
|
169
|
+
end.second * TimeSpan.MILLIS_PER_SECOND +
|
|
170
|
+
end.millisecond;
|
|
171
|
+
}
|
|
172
|
+
// Normalize this TimeSpan to a time-of-day (remove days component)
|
|
173
|
+
const thisTimeOfDay = this._millis % TimeSpan.MILLIS_PER_DAY;
|
|
174
|
+
const normalizedTime = thisTimeOfDay >= 0 ? thisTimeOfDay : thisTimeOfDay + TimeSpan.MILLIS_PER_DAY;
|
|
175
|
+
// Check if the time falls within the range
|
|
176
|
+
if (startTime <= endTime) {
|
|
177
|
+
// Normal case: range doesn't cross midnight
|
|
178
|
+
return normalizedTime >= startTime && normalizedTime <= endTime;
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
// Range crosses midnight (e.g., 22:00 to 02:00)
|
|
182
|
+
return normalizedTime >= startTime || normalizedTime <= endTime;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Checks if this TimeSpan (as a time-of-day) falls between two times
|
|
187
|
+
* @param startTime - Start time as TimeSpan
|
|
188
|
+
* @param endTime - End time as TimeSpan
|
|
189
|
+
* @returns true if this time is within the range
|
|
190
|
+
*/
|
|
191
|
+
isBetween(startTime, endTime) {
|
|
192
|
+
// Normalize all timespans to time-of-day (0-24 hours)
|
|
193
|
+
const thisTimeOfDay = this._millis % TimeSpan.MILLIS_PER_DAY;
|
|
194
|
+
const normalizedThis = thisTimeOfDay >= 0 ? thisTimeOfDay : thisTimeOfDay + TimeSpan.MILLIS_PER_DAY;
|
|
195
|
+
const startTimeOfDay = startTime._millis % TimeSpan.MILLIS_PER_DAY;
|
|
196
|
+
const normalizedStart = startTimeOfDay >= 0 ? startTimeOfDay : startTimeOfDay + TimeSpan.MILLIS_PER_DAY;
|
|
197
|
+
const endTimeOfDay = endTime._millis % TimeSpan.MILLIS_PER_DAY;
|
|
198
|
+
const normalizedEnd = endTimeOfDay >= 0 ? endTimeOfDay : endTimeOfDay + TimeSpan.MILLIS_PER_DAY;
|
|
199
|
+
if (normalizedStart <= normalizedEnd) {
|
|
200
|
+
// Normal case: range doesn't cross midnight
|
|
201
|
+
return normalizedThis >= normalizedStart && normalizedThis <= normalizedEnd;
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
// Range crosses midnight (e.g., 22:00 to 02:00)
|
|
205
|
+
return normalizedThis >= normalizedStart || normalizedThis <= normalizedEnd;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Returns the absolute value of this TimeSpan
|
|
210
|
+
*/
|
|
211
|
+
abs() {
|
|
212
|
+
return this._millis < 0 ? new TimeSpan(-this._millis) : this;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Multiplies the TimeSpan by a factor
|
|
216
|
+
*/
|
|
217
|
+
multiply(factor) {
|
|
218
|
+
factor = _is_number(_non_NaN())(factor, 'factor');
|
|
219
|
+
return new TimeSpan(this._millis * factor);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Divides the TimeSpan by a divisor
|
|
223
|
+
*/
|
|
224
|
+
divide(divisor) {
|
|
225
|
+
divisor = _is_number(_non_NaN())(divisor, 'divisor');
|
|
226
|
+
if (divisor === 0) {
|
|
227
|
+
throw new Error('Cannot divide TimeSpan by zero');
|
|
228
|
+
}
|
|
229
|
+
return new TimeSpan(this._millis / divisor);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Returns the duration (absolute value) of this TimeSpan
|
|
233
|
+
*/
|
|
234
|
+
duration() {
|
|
235
|
+
return this.abs();
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Converts TimeSpan to a plain object
|
|
239
|
+
*/
|
|
240
|
+
toObject() {
|
|
241
|
+
return {
|
|
242
|
+
days: this.days,
|
|
243
|
+
hours: this.hours,
|
|
244
|
+
minutes: this.minutes,
|
|
245
|
+
seconds: this.seconds,
|
|
246
|
+
milliseconds: this.milliseconds,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Converts this TimeSpan to a JavaScript Date
|
|
251
|
+
* @param baseDate - Optional base date to add the TimeSpan to. Defaults to current time.
|
|
252
|
+
* @returns A Date representing baseDate + this TimeSpan
|
|
253
|
+
*/
|
|
254
|
+
toDate(baseDate) {
|
|
255
|
+
const base = baseDate ? baseDate.getTime() : Date.now();
|
|
256
|
+
return new Date(base + this._millis);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Converts this TimeSpan to a Luxon DateTime
|
|
260
|
+
* @param baseDateTime - Optional base DateTime to add the TimeSpan to. Defaults to current time.
|
|
261
|
+
* @returns A DateTime representing baseDateTime + this TimeSpan
|
|
262
|
+
*/
|
|
263
|
+
toDateTime(baseDateTime) {
|
|
264
|
+
const base = baseDateTime || DateTime.now();
|
|
265
|
+
return base.plus({ milliseconds: this._millis });
|
|
266
|
+
}
|
|
267
|
+
valueOf() {
|
|
268
|
+
return this._millis;
|
|
269
|
+
}
|
|
270
|
+
toJSON() {
|
|
271
|
+
return this.toString();
|
|
272
|
+
}
|
|
273
|
+
toString() {
|
|
274
|
+
const absMillis = Math.abs(this._millis);
|
|
275
|
+
const negative = this._millis < 0;
|
|
276
|
+
const d = Math.floor(absMillis / TimeSpan.MILLIS_PER_DAY);
|
|
277
|
+
const h = Math.floor((absMillis % TimeSpan.MILLIS_PER_DAY) / TimeSpan.MILLIS_PER_HOUR);
|
|
278
|
+
const m = Math.floor((absMillis % TimeSpan.MILLIS_PER_HOUR) / TimeSpan.MILLIS_PER_MINUTE);
|
|
279
|
+
const s = Math.floor((absMillis % TimeSpan.MILLIS_PER_MINUTE) / TimeSpan.MILLIS_PER_SECOND);
|
|
280
|
+
const ms = Math.floor(absMillis % TimeSpan.MILLIS_PER_SECOND);
|
|
281
|
+
let text = '';
|
|
282
|
+
// Include days if present
|
|
283
|
+
if (d > 0) {
|
|
284
|
+
text = `${d}.${to2Digits(h)}:${to2Digits(m)}:${to2Digits(s)}`;
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
text = `${to2Digits(h)}:${to2Digits(m)}:${to2Digits(s)}`;
|
|
288
|
+
}
|
|
289
|
+
// Include milliseconds if present
|
|
290
|
+
if (ms > 0) {
|
|
291
|
+
text += `.${String(ms).padStart(3, '0')}`;
|
|
292
|
+
}
|
|
293
|
+
if (negative) {
|
|
294
|
+
text = '-' + text;
|
|
295
|
+
}
|
|
296
|
+
return text;
|
|
297
|
+
}
|
|
298
|
+
static fromDays(value) {
|
|
299
|
+
return TimeSpan.interval(value, TimeSpan.MILLIS_PER_DAY);
|
|
300
|
+
}
|
|
301
|
+
static fromHours(value) {
|
|
302
|
+
return TimeSpan.interval(value, TimeSpan.MILLIS_PER_HOUR);
|
|
303
|
+
}
|
|
304
|
+
static fromMilliseconds(value) {
|
|
305
|
+
return TimeSpan.interval(value, 1);
|
|
306
|
+
}
|
|
307
|
+
static fromMinutes(value) {
|
|
308
|
+
return TimeSpan.interval(value, TimeSpan.MILLIS_PER_MINUTE);
|
|
309
|
+
}
|
|
310
|
+
static fromSeconds(value) {
|
|
311
|
+
return TimeSpan.interval(value, TimeSpan.MILLIS_PER_SECOND);
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Creates a TimeSpan from a JavaScript Date object
|
|
315
|
+
* Represents the time elapsed from the given date until now
|
|
316
|
+
* @param date - The date to calculate elapsed time from
|
|
317
|
+
* @returns A TimeSpan representing the elapsed time
|
|
318
|
+
*/
|
|
319
|
+
static fromDate(date) {
|
|
320
|
+
const elapsed = Date.now() - date.getTime();
|
|
321
|
+
return new TimeSpan(elapsed);
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Creates a TimeSpan from a Luxon DateTime object
|
|
325
|
+
* Represents the time elapsed from the given DateTime until now
|
|
326
|
+
* @param dateTime - The DateTime to calculate elapsed time from
|
|
327
|
+
* @returns A TimeSpan representing the elapsed time
|
|
328
|
+
*/
|
|
329
|
+
static fromDateTime(dateTime) {
|
|
330
|
+
const elapsed = DateTime.now().toMillis() - dateTime.toMillis();
|
|
331
|
+
return new TimeSpan(elapsed);
|
|
332
|
+
}
|
|
333
|
+
static between(date1, date2) {
|
|
334
|
+
let millis1;
|
|
335
|
+
let millis2;
|
|
336
|
+
if (date1 instanceof Date) {
|
|
337
|
+
millis1 = date1.getTime();
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
millis1 = date1.toMillis();
|
|
341
|
+
}
|
|
342
|
+
if (date2 instanceof Date) {
|
|
343
|
+
millis2 = date2.getTime();
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
millis2 = date2.toMillis();
|
|
347
|
+
}
|
|
348
|
+
return new TimeSpan(millis1 - millis2);
|
|
349
|
+
}
|
|
350
|
+
static fromTime(daysOrHours, hoursOrMinutes, minutesOrSeconds, seconds, milliseconds) {
|
|
351
|
+
if (milliseconds != undefined) {
|
|
352
|
+
return this.fromTimeStartingFromDays(daysOrHours, hoursOrMinutes, minutesOrSeconds, seconds, milliseconds);
|
|
353
|
+
}
|
|
354
|
+
else {
|
|
355
|
+
return this.fromTimeStartingFromHours(daysOrHours, hoursOrMinutes, minutesOrSeconds, 0);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
static fromTimeStartingFromHours(hours, minutes, seconds, milliseconds) {
|
|
359
|
+
hours = _is_number(_non_NaN())(hours, 'hours');
|
|
360
|
+
minutes = _is_number(_non_NaN())(minutes, 'minutes');
|
|
361
|
+
seconds = _is_number(_non_NaN())(seconds, 'seconds');
|
|
362
|
+
milliseconds = _is_number(_non_NaN())(milliseconds, 'milliseconds');
|
|
363
|
+
const millis = TimeSpan.timeToMilliseconds(hours, minutes, seconds) + milliseconds;
|
|
364
|
+
return new TimeSpan(millis);
|
|
365
|
+
}
|
|
366
|
+
static fromTimeStartingFromDays(days, hours, minutes, seconds, milliseconds) {
|
|
367
|
+
days = _is_number(_non_NaN())(days, 'days');
|
|
368
|
+
hours = _is_number(_non_NaN())(hours, 'hours');
|
|
369
|
+
minutes = _is_number(_non_NaN())(minutes, 'minutes');
|
|
370
|
+
seconds = _is_number(_non_NaN())(seconds, 'seconds');
|
|
371
|
+
milliseconds = _is_number(_non_NaN())(milliseconds, 'milliseconds');
|
|
372
|
+
const totalMilliSeconds = days * TimeSpan.MILLIS_PER_DAY +
|
|
373
|
+
hours * TimeSpan.MILLIS_PER_HOUR +
|
|
374
|
+
minutes * TimeSpan.MILLIS_PER_MINUTE +
|
|
375
|
+
seconds * TimeSpan.MILLIS_PER_SECOND +
|
|
376
|
+
milliseconds;
|
|
377
|
+
if (totalMilliSeconds > TimeSpan.MAX_VALUE.totalMilliseconds ||
|
|
378
|
+
totalMilliSeconds < TimeSpan.MIN_VALUE.totalMilliseconds) {
|
|
379
|
+
throw new Error('TimeSpanTooLong');
|
|
380
|
+
}
|
|
381
|
+
return new TimeSpan(totalMilliSeconds);
|
|
382
|
+
}
|
|
383
|
+
static parse(span) {
|
|
384
|
+
if (span instanceof TimeSpan) {
|
|
385
|
+
return span;
|
|
386
|
+
}
|
|
387
|
+
if (span instanceof Date) {
|
|
388
|
+
// Calculate time elapsed since the date
|
|
389
|
+
span = Date.now() - span.getTime();
|
|
390
|
+
}
|
|
391
|
+
if (typeof span === 'number') {
|
|
392
|
+
return new TimeSpan(span);
|
|
393
|
+
}
|
|
394
|
+
if (!span) {
|
|
395
|
+
return null;
|
|
396
|
+
}
|
|
397
|
+
if (typeof span === 'object') {
|
|
398
|
+
const { days, hours, minutes, seconds, milliseconds } = span;
|
|
399
|
+
return TimeSpan.fromTime(days || 0, hours || 0, minutes || 0, seconds || 0, milliseconds || 0);
|
|
400
|
+
}
|
|
401
|
+
// Parse string format: "[d.]hh:mm:ss[.fff]"
|
|
402
|
+
// Examples: "12:30:45", "1.12:30:45", "12:30:45.123"
|
|
403
|
+
const tokens = span.split(':');
|
|
404
|
+
if (tokens.length < 3) {
|
|
405
|
+
throw new Error('Invalid TimeSpan format. Expected format: "[d.]hh:mm:ss[.fff]"');
|
|
406
|
+
}
|
|
407
|
+
const secondsParts = tokens[2].split('.');
|
|
408
|
+
let milliseconds = 0;
|
|
409
|
+
if (secondsParts.length === 2) {
|
|
410
|
+
// Pad or truncate to 3 digits
|
|
411
|
+
const msString = secondsParts[1].padEnd(3, '0').slice(0, 3);
|
|
412
|
+
milliseconds = +msString;
|
|
413
|
+
}
|
|
414
|
+
const daysParts = tokens[0].split('.');
|
|
415
|
+
if (daysParts.length === 2) {
|
|
416
|
+
// Format: "d.hh:mm:ss[.fff]"
|
|
417
|
+
return TimeSpan.fromTimeStartingFromDays(+daysParts[0], +daysParts[1], +tokens[1], +secondsParts[0], milliseconds);
|
|
418
|
+
}
|
|
419
|
+
// Format: "hh:mm:ss[.fff]"
|
|
420
|
+
return TimeSpan.fromTimeStartingFromHours(+tokens[0], +tokens[1], +secondsParts[0], milliseconds);
|
|
421
|
+
}
|
|
422
|
+
static interval(value, scale) {
|
|
423
|
+
value = _is_number(_non_NaN())(value, 'value');
|
|
424
|
+
const tmp = value * scale;
|
|
425
|
+
const millis = TimeSpan.round(tmp + (value >= 0 ? 0.5 : -0.5));
|
|
426
|
+
if (millis > TimeSpan.MAX_VALUE.totalMilliseconds ||
|
|
427
|
+
millis < TimeSpan.MIN_VALUE.totalMilliseconds) {
|
|
428
|
+
throw new Error('TimeSpanTooLong');
|
|
429
|
+
}
|
|
430
|
+
return new TimeSpan(millis);
|
|
431
|
+
}
|
|
432
|
+
static round(n) {
|
|
433
|
+
if (n < 0) {
|
|
434
|
+
return Math.ceil(n);
|
|
435
|
+
}
|
|
436
|
+
else if (n > 0) {
|
|
437
|
+
return Math.floor(n);
|
|
438
|
+
}
|
|
439
|
+
return 0;
|
|
440
|
+
}
|
|
441
|
+
static timeToMilliseconds(hour, minute, second) {
|
|
442
|
+
const totalSeconds = hour * 3600 + minute * 60 + second;
|
|
443
|
+
if (totalSeconds > TimeSpan.MAX_VALUE.totalSeconds ||
|
|
444
|
+
totalSeconds < TimeSpan.MIN_VALUE.totalSeconds) {
|
|
445
|
+
throw new Error('TimeSpanTooLong');
|
|
446
|
+
}
|
|
447
|
+
return totalSeconds * TimeSpan.MILLIS_PER_SECOND;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
TimeSpan.MILLIS_PER_SECOND = 1000;
|
|
451
|
+
TimeSpan.MILLIS_PER_MINUTE = TimeSpan.MILLIS_PER_SECOND * 60;
|
|
452
|
+
TimeSpan.MILLIS_PER_HOUR = TimeSpan.MILLIS_PER_MINUTE * 60;
|
|
453
|
+
TimeSpan.MILLIS_PER_DAY = TimeSpan.MILLIS_PER_HOUR * 24;
|
|
454
|
+
TimeSpan.ZERO = new TimeSpan(0);
|
|
455
|
+
TimeSpan.MAX_VALUE = new TimeSpan(Number.MAX_SAFE_INTEGER);
|
|
456
|
+
TimeSpan.MIN_VALUE = new TimeSpan(Number.MIN_SAFE_INTEGER);
|
|
457
|
+
function to2Digits(n) {
|
|
458
|
+
return String(n).padStart(2, '0');
|
|
459
|
+
}
|
|
460
|
+
//# sourceMappingURL=timespan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timespan.js","sourceRoot":"","sources":["../../src/timespan.ts"],"names":[],"mappings":"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"}
|