gnss-js 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -20,25 +20,31 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var src_exports = {};
22
22
  __export(src_exports, {
23
- ALPHABET: () => ALPHABET,
23
+ DAYS_MJD2000_MJD: () => DAYS_MJD2000_MJD,
24
+ DAYS_MJD_JULIAN: () => DAYS_MJD_JULIAN,
25
+ MILLISECONDS_GPS_TAI: () => MILLISECONDS_GPS_TAI,
24
26
  MILLISECONDS_IN_DAY: () => MILLISECONDS_IN_DAY,
25
27
  MILLISECONDS_IN_HOUR: () => MILLISECONDS_IN_HOUR,
26
28
  MILLISECONDS_IN_MINUTE: () => MILLISECONDS_IN_MINUTE,
27
29
  MILLISECONDS_IN_SECOND: () => MILLISECONDS_IN_SECOND,
28
30
  MILLISECONDS_IN_WEEK: () => MILLISECONDS_IN_WEEK,
31
+ MILLISECONDS_TT_TAI: () => MILLISECONDS_TT_TAI,
32
+ RINEX_CODES: () => RINEX_CODES,
29
33
  SECONDS_IN_DAY: () => SECONDS_IN_DAY,
30
34
  SECONDS_IN_HOUR: () => SECONDS_IN_HOUR,
31
35
  SECONDS_IN_MINUTE: () => SECONDS_IN_MINUTE,
32
36
  SECONDS_IN_WEEK: () => SECONDS_IN_WEEK,
33
- SECONDS_TT_TAI: () => SECONDS_TT_TAI,
34
37
  START_BDS_TIME: () => START_BDS_TIME,
35
38
  START_GAL_TIME: () => START_GAL_TIME,
36
39
  START_GLO_LEAP: () => START_GLO_LEAP,
37
40
  START_GPS_TIME: () => START_GPS_TIME,
38
41
  START_JULIAN_CALENDAR_UNIX_SECONDS: () => START_JULIAN_CALENDAR_UNIX_SECONDS,
42
+ START_JULIAN_TAI: () => START_JULIAN_TAI,
39
43
  START_LEAP_SECS_GPS: () => START_LEAP_SECS_GPS,
40
44
  START_MJD2000_TIME: () => START_MJD2000_TIME,
41
45
  START_MJD_UNIX_SECONDS: () => START_MJD_UNIX_SECONDS,
46
+ START_NTP_TIME: () => START_NTP_TIME,
47
+ START_TAI_TIME: () => START_TAI_TIME,
42
48
  START_UNIX_TIME: () => START_UNIX_TIME,
43
49
  getBdsTime: () => getBdsTime,
44
50
  getDateFromBdsTime: () => getDateFromBdsTime,
@@ -53,6 +59,8 @@ __export(src_exports, {
53
59
  getDateFromMJD: () => getDateFromMJD,
54
60
  getDateFromMJD2000: () => getDateFromMJD2000,
55
61
  getDateFromRINEX: () => getDateFromRINEX,
62
+ getDateFromTAI: () => getDateFromTAI,
63
+ getDateFromTT: () => getDateFromTT,
56
64
  getDateFromTimeOfDay: () => getDateFromTimeOfDay,
57
65
  getDateFromUnixTime: () => getDateFromUnixTime,
58
66
  getDayOfWeek: () => getDayOfWeek,
@@ -60,16 +68,20 @@ __export(src_exports, {
60
68
  getGalTime: () => getGalTime,
61
69
  getGloN4: () => getGloN4,
62
70
  getGloNA: () => getGloNA,
71
+ getGpsLeap: () => getGpsLeap,
63
72
  getGpsTime: () => getGpsTime,
64
73
  getHourCode: () => getHourCode,
65
74
  getHoursFromTimeDifference: () => getHoursFromTimeDifference,
66
75
  getJulianDate: () => getJulianDate,
67
- getLeapSeconds: () => getLeapSeconds,
68
- getLeapSecondsFromTAI: () => getLeapSecondsFromTAI,
76
+ getLeap: () => getLeap,
69
77
  getMJD: () => getMJD,
78
+ getMJD2000: () => getMJD2000,
70
79
  getMinutesFromTimeDifference: () => getMinutesFromTimeDifference,
80
+ getNtpTime: () => getNtpTime,
71
81
  getRINEX: () => getRINEX,
72
82
  getSecondsFromTimeDifference: () => getSecondsFromTimeDifference,
83
+ getTAIDate: () => getTAIDate,
84
+ getTTDate: () => getTTDate,
73
85
  getTimeDifference: () => getTimeDifference,
74
86
  getTimeDifferenceFromDays: () => getTimeDifferenceFromDays,
75
87
  getTimeDifferenceFromHours: () => getTimeDifferenceFromHours,
@@ -80,11 +92,13 @@ __export(src_exports, {
80
92
  getTimeOfWeek: () => getTimeOfWeek,
81
93
  getTotalDaysFromTimeDifference: () => getTotalDaysFromTimeDifference,
82
94
  getUnixTime: () => getUnixTime,
83
- getWeekNumber: () => getWeekNumber
95
+ getUtcDate: () => getUtcDate,
96
+ getWeekNumber: () => getWeekNumber,
97
+ getWeekOfYear: () => getWeekOfYear
84
98
  });
85
99
  module.exports = __toCommonJS(src_exports);
86
100
 
87
- // src/constants.ts
101
+ // src/constants/time.ts
88
102
  var SECONDS_IN_WEEK = 604800;
89
103
  var SECONDS_IN_DAY = 86400;
90
104
  var SECONDS_IN_HOUR = 3600;
@@ -94,140 +108,59 @@ var MILLISECONDS_IN_DAY = 864e5;
94
108
  var MILLISECONDS_IN_HOUR = 36e5;
95
109
  var MILLISECONDS_IN_MINUTE = 6e4;
96
110
  var MILLISECONDS_IN_SECOND = 1e3;
97
- var SECONDS_TT_TAI = 32.184;
111
+ var MILLISECONDS_TT_TAI = 32184;
112
+ var MILLISECONDS_GPS_TAI = 19e3;
98
113
  var START_LEAP_SECS_GPS = 19;
99
- var START_GPS_TIME = new Date(Date.UTC(1980, 0, 6, 0, 0, 0, 0));
100
- var START_GAL_TIME = new Date(Date.UTC(1999, 7, 22, 0, 0, 0));
101
- var START_BDS_TIME = new Date(Date.UTC(2006, 0, 1, 0, 0, 0));
102
- var START_UNIX_TIME = new Date(Date.UTC(1970, 0, 1, 0, 0, 0));
103
- var START_MJD2000_TIME = new Date(Date.UTC(2e3, 0, 1, 0, 0, 0));
104
- var ALPHABET = "abcdefghijklmnopqrstuvwxyz".split("");
105
- var START_GLO_LEAP = new Date(Date.UTC(1996, 0, 1, 0, 0, 0, 0));
114
+ var START_GPS_TIME = /* @__PURE__ */ new Date("1980-01-06T00:00:00Z");
115
+ var START_GAL_TIME = /* @__PURE__ */ new Date("1999-08-22T00:00:00Z");
116
+ var START_BDS_TIME = /* @__PURE__ */ new Date("2006-01-01T00:00:00Z");
117
+ var START_UNIX_TIME = /* @__PURE__ */ new Date("1970-01-01T00:00:00Z");
118
+ var START_NTP_TIME = /* @__PURE__ */ new Date("1900-01-01T00:00:00Z");
119
+ var START_GLO_LEAP = /* @__PURE__ */ new Date("1996-01-01T00:00:00Z");
120
+ var START_MJD2000_TIME = /* @__PURE__ */ new Date("2000-01-01T00:00:00Z");
121
+ var START_TAI_TIME = /* @__PURE__ */ new Date("1957-12-31T23:59:41Z");
122
+ var RINEX_CODES = [
123
+ "a",
124
+ "b",
125
+ "c",
126
+ "d",
127
+ "e",
128
+ "f",
129
+ "g",
130
+ "h",
131
+ "i",
132
+ "j",
133
+ "k",
134
+ "l",
135
+ "m",
136
+ "n",
137
+ "o",
138
+ "p",
139
+ "q",
140
+ "r",
141
+ "s",
142
+ "t",
143
+ "u",
144
+ "v",
145
+ "w",
146
+ "x"
147
+ ];
106
148
  var START_JULIAN_CALENDAR_UNIX_SECONDS = 24405875e-1;
149
+ var START_JULIAN_TAI = 24362045e-1;
150
+ var DAYS_MJD_JULIAN = 24000005e-1;
151
+ var DAYS_MJD2000_MJD = 51544.5;
107
152
  var START_MJD_UNIX_SECONDS = 40587;
108
153
 
109
- // src/functions.ts
110
- function isValidDate(d) {
111
- return d instanceof Date && !Number.isNaN(d);
112
- }
113
- function getLeapSeconds(date) {
114
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 36922176e5) {
115
- return 37;
116
- }
117
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 36446976e5) {
118
- return 36;
119
- }
120
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 35500896e5) {
121
- return 35;
122
- }
123
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 34397568e5) {
124
- return 34;
125
- }
126
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 33450624e5) {
127
- return 33;
128
- }
129
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 31241376e5) {
130
- return 32;
131
- }
132
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 3076704e6) {
133
- return 31;
134
- }
135
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 30294432e5) {
136
- return 30;
137
- }
138
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 29820096e5) {
139
- return 29;
140
- }
141
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 29504736e5) {
142
- return 28;
143
- }
144
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 29189376e5) {
145
- return 27;
146
- }
147
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 28716768e5) {
148
- return 26;
149
- }
150
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 28401408e5) {
151
- return 25;
152
- }
153
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 27769824e5) {
154
- return 24;
155
- }
156
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 26980128e5) {
157
- return 23;
158
- }
159
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 26348544e5) {
160
- return 22;
161
- }
162
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 26033184e5) {
163
- return 21;
164
- }
165
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 25717824e5) {
166
- return 20;
167
- }
168
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 25245216e5) {
169
- return 19;
170
- }
171
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 24929856e5) {
172
- return 18;
173
- }
174
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 24614496e5) {
175
- return 17;
176
- }
177
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 24299136e5) {
178
- return 16;
179
- }
180
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 23982912e5) {
181
- return 15;
182
- }
183
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 23667552e5) {
184
- return 14;
185
- }
186
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 23352192e5) {
187
- return 13;
188
- }
189
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 23036832e5) {
190
- return 12;
191
- }
192
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 22877856e5) {
193
- return 11;
194
- }
195
- if (date.getTime() >= Date.UTC(1900, 0, 1) + 22720608e5) {
196
- return 10;
197
- }
198
- return 0;
199
- }
200
- function getGpsTime(date) {
201
- return date.getTime() - START_GPS_TIME.getTime();
202
- }
203
- function getGalTime(date) {
204
- return date.getTime() - START_GAL_TIME.getTime();
205
- }
206
- function getBdsTime(date) {
207
- return date.getTime() - START_BDS_TIME.getTime();
208
- }
209
- function getUnixTime(date) {
210
- return date.getTime() - START_UNIX_TIME.getTime();
211
- }
212
- function getWeekNumber(date) {
213
- return Math.floor(getGpsTime(date) / MILLISECONDS_IN_WEEK);
214
- }
215
- function getTimeOfWeek(date) {
216
- return Math.floor(
217
- getGpsTime(date) % MILLISECONDS_IN_WEEK / MILLISECONDS_IN_SECOND
218
- );
219
- }
154
+ // src/time/functions.ts
220
155
  function getTimeOfDay(date) {
221
- return Math.floor(
222
- (date.getTime() - Date.UTC(
223
- date.getUTCFullYear(),
224
- date.getUTCMonth(),
225
- date.getUTCDate(),
226
- 0,
227
- 0,
228
- 0
229
- )) / MILLISECONDS_IN_SECOND
230
- );
156
+ return (date.getTime() - Date.UTC(
157
+ date.getUTCFullYear(),
158
+ date.getUTCMonth(),
159
+ date.getUTCDate(),
160
+ 0,
161
+ 0,
162
+ 0
163
+ )) / MILLISECONDS_IN_SECOND;
231
164
  }
232
165
  function getDateFromTimeOfDay(timeOfDay, dateRaw) {
233
166
  const date = new Date(
@@ -240,68 +173,12 @@ function getDateFromTimeOfDay(timeOfDay, dateRaw) {
240
173
  0
241
174
  ) + timeOfDay * MILLISECONDS_IN_SECOND
242
175
  );
243
- if (!isValidDate(date))
244
- return void 0;
245
176
  return date;
246
177
  }
247
- function getGloN4(date) {
248
- return Math.floor((date.getUTCFullYear() - START_GLO_LEAP.getFullYear()) / 4);
249
- }
250
- function getGloNA(date) {
251
- const n4 = getGloN4(date);
252
- const init4YearPeriod = new Date(START_GLO_LEAP);
253
- init4YearPeriod.setUTCFullYear(init4YearPeriod.getUTCFullYear() + n4 * 4);
254
- return Math.floor(getTimeDifference(init4YearPeriod, date) / MILLISECONDS_IN_DAY) + 1;
255
- }
256
- function getDateFromGpsData(weekNumber, timeOfWeek) {
257
- const date = new Date(
258
- weekNumber * MILLISECONDS_IN_WEEK + timeOfWeek * MILLISECONDS_IN_SECOND + START_GPS_TIME.getTime()
259
- );
260
- if (!isValidDate(date))
261
- return void 0;
262
- return date;
263
- }
264
- function getDateFromGpsTime(gpsTime) {
265
- const date = new Date(
266
- gpsTime * MILLISECONDS_IN_SECOND + START_GPS_TIME.getTime()
267
- );
268
- if (!isValidDate(date))
269
- return void 0;
270
- return date;
271
- }
272
- function getDateFromGalTime(galTime) {
273
- const date = new Date(
274
- galTime * MILLISECONDS_IN_SECOND + START_GAL_TIME.getTime()
275
- );
276
- if (!isValidDate(date))
277
- return void 0;
278
- return date;
279
- }
280
- function getDateFromBdsTime(bdsTime) {
281
- const date = new Date(
282
- bdsTime * MILLISECONDS_IN_SECOND + START_BDS_TIME.getTime()
283
- );
284
- if (!isValidDate(date))
285
- return void 0;
286
- return date;
287
- }
288
- function getDateFromUnixTime(unixTime) {
289
- const date = new Date(
290
- unixTime * MILLISECONDS_IN_SECOND + START_UNIX_TIME.getTime()
291
- );
292
- if (!isValidDate(date))
293
- return void 0;
294
- return date;
295
- }
296
- function getDateFromGloN(n4, na, tod) {
297
- const date = new Date(START_GLO_LEAP);
298
- date.setFullYear(date.getUTCFullYear() + n4 * 4);
299
- date.setTime(
300
- date.getTime() + (na - 1) * MILLISECONDS_IN_DAY + tod * MILLISECONDS_IN_SECOND
301
- );
302
- if (!isValidDate(date))
303
- return void 0;
304
- return date;
178
+ function getDayOfYear(date) {
179
+ return Math.floor(
180
+ (date.getTime() - Date.UTC(date.getUTCFullYear())) / MILLISECONDS_IN_DAY
181
+ ) + 1;
305
182
  }
306
183
  function getDateFromDayOfYear(dayOfYear, date) {
307
184
  return new Date(
@@ -316,121 +193,58 @@ function getDateFromDayOfYear(dayOfYear, date) {
316
193
  ) + (dayOfYear - 1) * MILLISECONDS_IN_DAY
317
194
  );
318
195
  }
319
- function getDayOfYear(date) {
320
- return Math.floor(
321
- (date.getTime() - Date.UTC(date.getUTCFullYear())) / MILLISECONDS_IN_DAY
322
- ) + 1;
323
- }
324
196
  function getDayOfWeek(date) {
325
197
  return date.getUTCDay();
326
198
  }
327
199
  function getDateFromDayOfWeek(dayOfWeek, dateRaw) {
328
200
  if (dayOfWeek < 0 || dayOfWeek > 6)
329
201
  throw new Error("Day of week must be a value between 0 and 7");
330
- const date = new Date(
202
+ return new Date(
331
203
  dateRaw.getTime() + (dayOfWeek - dateRaw.getUTCDay()) * MILLISECONDS_IN_DAY
332
204
  );
333
- if (!isValidDate(date))
334
- return void 0;
335
- return date;
336
205
  }
337
206
  function getDateFromHourCode(hourCode, date) {
338
- const hour = ALPHABET.indexOf(hourCode);
339
- if (hour !== -1) {
340
- const newDate = new Date(date.getTime());
341
- newDate.setUTCHours(hour);
342
- return newDate;
343
- }
344
- return void 0;
207
+ const hour = RINEX_CODES.indexOf(hourCode);
208
+ if (hour === -1)
209
+ throw new Error("Hour code must be a lowercase letter between a and x");
210
+ const newDate = new Date(date.getTime());
211
+ newDate.setUTCHours(hour);
212
+ return newDate;
345
213
  }
346
214
  function getHourCode(date) {
347
- return ALPHABET[date.getUTCHours()];
348
- }
349
- function getJulianDate(date) {
350
- return date.getTime() / MILLISECONDS_IN_DAY + START_JULIAN_CALENDAR_UNIX_SECONDS;
215
+ return RINEX_CODES[date.getUTCHours()];
351
216
  }
352
- function getDateFromJulianDate(julianDate) {
353
- const date = new Date(
354
- (julianDate - START_JULIAN_CALENDAR_UNIX_SECONDS) * MILLISECONDS_IN_DAY
217
+ function getWeekOfYear(date) {
218
+ const target = new Date(
219
+ Date.UTC(date.getFullYear(), date.getMonth(), date.getDate())
355
220
  );
356
- if (!isValidDate(date))
357
- return void 0;
358
- return date;
359
- }
360
- function getMJD(date) {
361
- return date.getTime() / MILLISECONDS_IN_DAY + START_MJD_UNIX_SECONDS;
362
- }
363
- function getDateFromMJD(mjd) {
364
- if (Number.isNaN(mjd))
365
- return void 0;
366
- const date = new Date((mjd - START_MJD_UNIX_SECONDS) * MILLISECONDS_IN_DAY);
367
- if (!isValidDate(date))
368
- return void 0;
369
- return date;
370
- }
371
- function getDateFromMJD2000(mjd2000) {
372
- const date = new Date(
373
- (mjd2000 - START_MJD_UNIX_SECONDS + 51544) * MILLISECONDS_IN_DAY
374
- );
375
- if (!isValidDate(date))
376
- return void 0;
377
- return date;
378
- }
379
- function getDateFromRINEX(rinex) {
380
- const year = Number.parseInt(rinex.substring(2, 6));
381
- const month = Number.parseInt(rinex.substring(7, 9)) - 1;
382
- const day = Number.parseInt(rinex.substring(10, 12));
383
- const hour = Number.parseInt(rinex.substring(13, 15));
384
- const minute = Number.parseInt(rinex.substring(16, 18));
385
- const second = Number.parseInt(rinex.substring(19, 21));
386
- const millisecond = Number.parseInt(rinex.substring(22, 29)) / 1e4;
387
- const date = new Date(
388
- Date.UTC(year, month, day, hour, minute, second, millisecond)
389
- );
390
- if (!isValidDate(date))
391
- return void 0;
392
- return date;
393
- }
394
- function getLeapSecondsFromTAI(date) {
395
- const leapsTAI = getLeapSeconds(date);
396
- const dateUTC = new Date(date.getTime() - leapsTAI * MILLISECONDS_IN_SECOND);
397
- const leapsUTC = getLeapSeconds(dateUTC);
398
- const dateTAI = new Date(date.getTime() + leapsUTC * MILLISECONDS_IN_SECOND);
399
- if (dateTAI.getTime() === date.getTime()) {
400
- return leapsTAI;
401
- }
402
- if (dateTAI.getTime() < date.getTime()) {
403
- return leapsTAI - 1;
404
- }
405
- return 0;
221
+ const dayNr = (target.getUTCDay() + 6) % 7;
222
+ target.setUTCDate(target.getUTCDate() - dayNr + 3);
223
+ const firstThursday = new Date(Date.UTC(target.getUTCFullYear(), 0, 4));
224
+ const dayDiff = (target.getTime() - firstThursday.getTime()) / (86400 * 1e3);
225
+ return 1 + Math.floor(dayDiff / 7) + 1;
406
226
  }
227
+
228
+ // src/time/time-difference.ts
407
229
  function getTimeDifference(startDate, finalDate) {
408
230
  return Math.floor(finalDate.getTime() - startDate.getTime());
409
231
  }
410
232
  function getSecondsFromTimeDifference(timeDifference) {
411
- if (Number.isNaN(timeDifference))
412
- return void 0;
413
233
  return Math.floor(
414
234
  timeDifference % MILLISECONDS_IN_MINUTE / MILLISECONDS_IN_SECOND
415
235
  );
416
236
  }
417
237
  function getMinutesFromTimeDifference(timeDifference) {
418
- if (Number.isNaN(timeDifference))
419
- return void 0;
420
238
  return Math.floor(
421
239
  timeDifference % MILLISECONDS_IN_HOUR / MILLISECONDS_IN_MINUTE
422
240
  );
423
241
  }
424
242
  function getHoursFromTimeDifference(timeDifference) {
425
- if (Number.isNaN(timeDifference))
426
- return void 0;
427
243
  return Math.floor(
428
244
  timeDifference % MILLISECONDS_IN_DAY / MILLISECONDS_IN_HOUR
429
245
  );
430
246
  }
431
247
  function getTotalDaysFromTimeDifference(timeDifference) {
432
- if (Number.isNaN(timeDifference))
433
- return void 0;
434
248
  return Math.floor(timeDifference / MILLISECONDS_IN_DAY);
435
249
  }
436
250
  function getTimeDifferenceFromSeconds(seconds) {
@@ -447,34 +261,239 @@ function getTimeDifferenceFromDays(days) {
447
261
  }
448
262
  function getTimeDifferenceFromObject(timeDifferenceObject) {
449
263
  const { seconds, minutes, hours, days } = timeDifferenceObject;
450
- if (Number.isNaN(seconds) || Number.isNaN(minutes) || Number.isNaN(hours) || Number.isNaN(days))
451
- return void 0;
452
264
  return getTimeDifferenceFromSeconds(seconds) + getTimeDifferenceFromMinutes(minutes) + getTimeDifferenceFromHours(hours) + getTimeDifferenceFromDays(days);
453
265
  }
266
+
267
+ // src/time/gnss.ts
268
+ function getGpsTime(date) {
269
+ return date.getTime() - START_GPS_TIME.getTime();
270
+ }
271
+ function getDateFromGpsTime(gpsTime) {
272
+ return new Date(gpsTime + START_GPS_TIME.getTime());
273
+ }
274
+ function getGalTime(date) {
275
+ return date.getTime() - START_GAL_TIME.getTime();
276
+ }
277
+ function getDateFromGalTime(galTime) {
278
+ return new Date(galTime + START_GAL_TIME.getTime());
279
+ }
280
+ function getBdsTime(date) {
281
+ return date.getTime() - START_BDS_TIME.getTime();
282
+ }
283
+ function getDateFromBdsTime(bdsTime) {
284
+ return new Date(bdsTime + START_BDS_TIME.getTime());
285
+ }
286
+ function getUnixTime(date) {
287
+ return date.getTime() - START_UNIX_TIME.getTime();
288
+ }
289
+ function getDateFromUnixTime(unixTime) {
290
+ return new Date(unixTime + START_UNIX_TIME.getTime());
291
+ }
292
+ function getWeekNumber(date) {
293
+ return Math.floor(getGpsTime(date) / MILLISECONDS_IN_WEEK);
294
+ }
295
+ function getTimeOfWeek(date) {
296
+ return getGpsTime(date) % MILLISECONDS_IN_WEEK / MILLISECONDS_IN_SECOND;
297
+ }
298
+ function getDateFromGpsData(weekNumber, timeOfWeek) {
299
+ return new Date(
300
+ weekNumber * MILLISECONDS_IN_WEEK + timeOfWeek * MILLISECONDS_IN_SECOND + START_GPS_TIME.getTime()
301
+ );
302
+ }
303
+ function getTAIDate(date) {
304
+ return new Date(date.getTime() + MILLISECONDS_GPS_TAI);
305
+ }
306
+ function getDateFromTAI(tai_date) {
307
+ return new Date(tai_date.getTime() - MILLISECONDS_GPS_TAI);
308
+ }
309
+ function getTTDate(date) {
310
+ return new Date(date.getTime() + MILLISECONDS_GPS_TAI + MILLISECONDS_TT_TAI);
311
+ }
312
+ function getDateFromTT(tt_date) {
313
+ return new Date(
314
+ tt_date.getTime() - MILLISECONDS_GPS_TAI - MILLISECONDS_TT_TAI
315
+ );
316
+ }
317
+ function getGloN4(date) {
318
+ return Math.floor((date.getUTCFullYear() - START_GLO_LEAP.getFullYear()) / 4);
319
+ }
320
+ function getGloNA(date) {
321
+ const n4 = getGloN4(date);
322
+ const init4YearPeriod = new Date(START_GLO_LEAP);
323
+ init4YearPeriod.setUTCFullYear(init4YearPeriod.getUTCFullYear() + n4 * 4);
324
+ return Math.floor(getTimeDifference(init4YearPeriod, date) / MILLISECONDS_IN_DAY) + 1;
325
+ }
326
+ function getDateFromGloN(n4, na, tod) {
327
+ const date = new Date(START_GLO_LEAP);
328
+ date.setFullYear(date.getUTCFullYear() + n4 * 4);
329
+ date.setTime(
330
+ date.getTime() + (na - 1) * MILLISECONDS_IN_DAY + tod * MILLISECONDS_IN_SECOND
331
+ );
332
+ return date;
333
+ }
334
+ function getNtpTime(date) {
335
+ return getTAIDate(date).getTime() - START_NTP_TIME.getTime();
336
+ }
337
+
338
+ // src/time/rinex.ts
454
339
  function getRINEX(date) {
455
- return "> " + date.getUTCFullYear() + " " + (date.getUTCMonth() + 1).toString().padStart(2, "0") + " " + date.getUTCDate().toString().padStart(2, "0") + " " + date.getUTCHours().toString().padStart(2, "0") + " " + date.getUTCMinutes().toString().padStart(2, "0") + " " + (date.getUTCMilliseconds() / MILLISECONDS_IN_SECOND + date.getUTCSeconds()).toFixed(7).padStart(2, "0");
340
+ const seconds = date.getUTCSeconds();
341
+ const milliseconds = date.getUTCMilliseconds();
342
+ const fractionalSeconds = (milliseconds / MILLISECONDS_IN_SECOND).toFixed(7).slice(1);
343
+ const formatted = `> ${date.getUTCFullYear()} ${String(
344
+ date.getUTCMonth() + 1
345
+ ).padStart(2, "0")} ${String(date.getUTCDate()).padStart(2, "0")} ${String(
346
+ date.getUTCHours()
347
+ ).padStart(2, "0")} ${String(date.getUTCMinutes()).padStart(
348
+ 2,
349
+ "0"
350
+ )} ${String(seconds).padStart(2, "0")}${fractionalSeconds}`;
351
+ return formatted;
352
+ }
353
+ function getDateFromRINEX(rinex) {
354
+ const year = Number.parseInt(rinex.substring(2, 6));
355
+ const month = Number.parseInt(rinex.substring(7, 9)) - 1;
356
+ const day = Number.parseInt(rinex.substring(10, 12));
357
+ const hour = Number.parseInt(rinex.substring(13, 15));
358
+ const minute = Number.parseInt(rinex.substring(16, 18));
359
+ const second = Number.parseInt(rinex.substring(19, 21));
360
+ const millisecond = Number.parseInt(rinex.substring(22, 29)) / 1e4;
361
+ const date = new Date(
362
+ Date.UTC(year, month, day, hour, minute, second, millisecond)
363
+ );
364
+ return date;
365
+ }
366
+
367
+ // src/time/utc.ts
368
+ function getLeap(date) {
369
+ const ntp_time = getNtpTime(date);
370
+ const leapSecondsMap = {
371
+ 2272060800: 10,
372
+ // 1 Jan 1972
373
+ 2287785600: 11,
374
+ // 1 Jul 1972
375
+ 2303683200: 12,
376
+ // 1 Jan 1973
377
+ 2335219200: 13,
378
+ // 1 Jan 1974
379
+ 2366755200: 14,
380
+ // 1 Jan 1975
381
+ 2398291200: 15,
382
+ // 1 Jan 1976
383
+ 2429913600: 16,
384
+ // 1 Jan 1977
385
+ 2461449600: 17,
386
+ // 1 Jan 1978
387
+ 2492985600: 18,
388
+ // 1 Jan 1979
389
+ 2524521600: 19,
390
+ // 1 Jan 1980
391
+ 2571782400: 20,
392
+ // 1 Jul 1981
393
+ 2603318400: 21,
394
+ // 1 Jul 1982
395
+ 2634854400: 22,
396
+ // 1 Jul 1983
397
+ 2698012800: 23,
398
+ // 1 Jul 1985
399
+ 2776982400: 24,
400
+ // 1 Jan 1988
401
+ 2840140800: 25,
402
+ // 1 Jan 1990
403
+ 2871676800: 26,
404
+ // 1 Jan 1991
405
+ 2918937600: 27,
406
+ // 1 Jul 1992
407
+ 2950473600: 28,
408
+ // 1 Jul 1993
409
+ 2982009600: 29,
410
+ // 1 Jul 1994
411
+ 3029443200: 30,
412
+ // 1 Jan 1996
413
+ 3076704e3: 31,
414
+ // 1 Jul 1997
415
+ 3124137600: 32,
416
+ // 1 Jan 1999
417
+ 3345062400: 33,
418
+ // 1 Jan 2006
419
+ 3439756800: 34,
420
+ // 1 Jan 2009
421
+ 3550089600: 35,
422
+ // 1 Jul 2012
423
+ 3644697600: 36,
424
+ // 1 Jul 2015
425
+ 3692217600: 37
426
+ // 1 Jan 2017
427
+ };
428
+ for (const [timestamp, leapSeconds] of Object.entries(
429
+ leapSecondsMap
430
+ ).reverse()) {
431
+ if (ntp_time / MILLISECONDS_IN_SECOND - leapSeconds >= Number(timestamp)) {
432
+ return leapSeconds;
433
+ }
434
+ }
435
+ return 0;
436
+ }
437
+ function getGpsLeap(date) {
438
+ const leap_seconds = getLeap(date);
439
+ if (leap_seconds < 0)
440
+ return 0;
441
+ return leap_seconds - 19;
442
+ }
443
+ function getUtcDate(date) {
444
+ const tai_date = getTAIDate(date);
445
+ const leap_seconds = getLeap(date);
446
+ return new Date(tai_date.getTime() - leap_seconds * MILLISECONDS_IN_SECOND);
447
+ }
448
+
449
+ // src/time/julian.ts
450
+ function getJulianDate(date) {
451
+ return (date.getTime() - START_TAI_TIME.getTime()) / MILLISECONDS_IN_DAY + START_JULIAN_TAI;
452
+ }
453
+ function getDateFromJulianDate(julianDate) {
454
+ return new Date(
455
+ (julianDate - 24362045e-1) * MILLISECONDS_IN_DAY + START_TAI_TIME.getTime()
456
+ );
457
+ }
458
+ function getMJD(date) {
459
+ return getJulianDate(date) - DAYS_MJD_JULIAN;
460
+ }
461
+ function getDateFromMJD(mjd) {
462
+ return getDateFromJulianDate(mjd + DAYS_MJD_JULIAN);
463
+ }
464
+ function getMJD2000(date) {
465
+ return getMJD(date) - DAYS_MJD2000_MJD;
466
+ }
467
+ function getDateFromMJD2000(mjd2000) {
468
+ return getDateFromMJD(mjd2000 + DAYS_MJD2000_MJD);
456
469
  }
457
470
  // Annotate the CommonJS export names for ESM import in node:
458
471
  0 && (module.exports = {
459
- ALPHABET,
472
+ DAYS_MJD2000_MJD,
473
+ DAYS_MJD_JULIAN,
474
+ MILLISECONDS_GPS_TAI,
460
475
  MILLISECONDS_IN_DAY,
461
476
  MILLISECONDS_IN_HOUR,
462
477
  MILLISECONDS_IN_MINUTE,
463
478
  MILLISECONDS_IN_SECOND,
464
479
  MILLISECONDS_IN_WEEK,
480
+ MILLISECONDS_TT_TAI,
481
+ RINEX_CODES,
465
482
  SECONDS_IN_DAY,
466
483
  SECONDS_IN_HOUR,
467
484
  SECONDS_IN_MINUTE,
468
485
  SECONDS_IN_WEEK,
469
- SECONDS_TT_TAI,
470
486
  START_BDS_TIME,
471
487
  START_GAL_TIME,
472
488
  START_GLO_LEAP,
473
489
  START_GPS_TIME,
474
490
  START_JULIAN_CALENDAR_UNIX_SECONDS,
491
+ START_JULIAN_TAI,
475
492
  START_LEAP_SECS_GPS,
476
493
  START_MJD2000_TIME,
477
494
  START_MJD_UNIX_SECONDS,
495
+ START_NTP_TIME,
496
+ START_TAI_TIME,
478
497
  START_UNIX_TIME,
479
498
  getBdsTime,
480
499
  getDateFromBdsTime,
@@ -489,6 +508,8 @@ function getRINEX(date) {
489
508
  getDateFromMJD,
490
509
  getDateFromMJD2000,
491
510
  getDateFromRINEX,
511
+ getDateFromTAI,
512
+ getDateFromTT,
492
513
  getDateFromTimeOfDay,
493
514
  getDateFromUnixTime,
494
515
  getDayOfWeek,
@@ -496,16 +517,20 @@ function getRINEX(date) {
496
517
  getGalTime,
497
518
  getGloN4,
498
519
  getGloNA,
520
+ getGpsLeap,
499
521
  getGpsTime,
500
522
  getHourCode,
501
523
  getHoursFromTimeDifference,
502
524
  getJulianDate,
503
- getLeapSeconds,
504
- getLeapSecondsFromTAI,
525
+ getLeap,
505
526
  getMJD,
527
+ getMJD2000,
506
528
  getMinutesFromTimeDifference,
529
+ getNtpTime,
507
530
  getRINEX,
508
531
  getSecondsFromTimeDifference,
532
+ getTAIDate,
533
+ getTTDate,
509
534
  getTimeDifference,
510
535
  getTimeDifferenceFromDays,
511
536
  getTimeDifferenceFromHours,
@@ -516,5 +541,7 @@ function getRINEX(date) {
516
541
  getTimeOfWeek,
517
542
  getTotalDaysFromTimeDifference,
518
543
  getUnixTime,
519
- getWeekNumber
544
+ getUtcDate,
545
+ getWeekNumber,
546
+ getWeekOfYear
520
547
  });