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