gnss-js 0.1.0 → 0.1.2
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.mjs → index.cjs} +259 -115
- package/dist/{index.d.mts → index.d.cts} +20 -15
- package/dist/index.d.ts +20 -15
- package/dist/index.js +159 -216
- package/jest.config.ts +9 -0
- package/package.json +4 -2
- package/test/functions.test.ts +63 -0
- package/test/gnss-scales.test.ts +95 -0
- package/test/julian.test.ts +145 -0
- package/test/rinex.test.ts +11 -0
- package/test/test.ts +10 -0
- package/test/utc.test.ts +25 -0
- package/jest.config.js +0 -6
- package/test/functions.test.js +0 -69
- package/test/gnss-scales.test.js +0 -78
- package/test/julian.test.js +0 -41
- package/test/rinex.test.js +0 -11
- package/test/utc.test.js +0 -19
package/dist/index.js
CHANGED
|
@@ -1,103 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// src/index.ts
|
|
21
|
-
var src_exports = {};
|
|
22
|
-
__export(src_exports, {
|
|
23
|
-
DAYS_MJD2000_MJD: () => DAYS_MJD2000_MJD,
|
|
24
|
-
DAYS_MJD_JULIAN: () => DAYS_MJD_JULIAN,
|
|
25
|
-
MILLISECONDS_GPS_TAI: () => MILLISECONDS_GPS_TAI,
|
|
26
|
-
MILLISECONDS_IN_DAY: () => MILLISECONDS_IN_DAY,
|
|
27
|
-
MILLISECONDS_IN_HOUR: () => MILLISECONDS_IN_HOUR,
|
|
28
|
-
MILLISECONDS_IN_MINUTE: () => MILLISECONDS_IN_MINUTE,
|
|
29
|
-
MILLISECONDS_IN_SECOND: () => MILLISECONDS_IN_SECOND,
|
|
30
|
-
MILLISECONDS_IN_WEEK: () => MILLISECONDS_IN_WEEK,
|
|
31
|
-
MILLISECONDS_TT_TAI: () => MILLISECONDS_TT_TAI,
|
|
32
|
-
RINEX_CODES: () => RINEX_CODES,
|
|
33
|
-
SECONDS_IN_DAY: () => SECONDS_IN_DAY,
|
|
34
|
-
SECONDS_IN_HOUR: () => SECONDS_IN_HOUR,
|
|
35
|
-
SECONDS_IN_MINUTE: () => SECONDS_IN_MINUTE,
|
|
36
|
-
SECONDS_IN_WEEK: () => SECONDS_IN_WEEK,
|
|
37
|
-
START_BDS_TIME: () => START_BDS_TIME,
|
|
38
|
-
START_GAL_TIME: () => START_GAL_TIME,
|
|
39
|
-
START_GLO_LEAP: () => START_GLO_LEAP,
|
|
40
|
-
START_GPS_TIME: () => START_GPS_TIME,
|
|
41
|
-
START_JULIAN_CALENDAR_UNIX_SECONDS: () => START_JULIAN_CALENDAR_UNIX_SECONDS,
|
|
42
|
-
START_JULIAN_TAI: () => START_JULIAN_TAI,
|
|
43
|
-
START_LEAP_SECS_GPS: () => START_LEAP_SECS_GPS,
|
|
44
|
-
START_MJD2000_TIME: () => START_MJD2000_TIME,
|
|
45
|
-
START_MJD_UNIX_SECONDS: () => START_MJD_UNIX_SECONDS,
|
|
46
|
-
START_NTP_TIME: () => START_NTP_TIME,
|
|
47
|
-
START_TAI_TIME: () => START_TAI_TIME,
|
|
48
|
-
START_UNIX_TIME: () => START_UNIX_TIME,
|
|
49
|
-
getBdsTime: () => getBdsTime,
|
|
50
|
-
getDateFromBdsTime: () => getDateFromBdsTime,
|
|
51
|
-
getDateFromDayOfWeek: () => getDateFromDayOfWeek,
|
|
52
|
-
getDateFromDayOfYear: () => getDateFromDayOfYear,
|
|
53
|
-
getDateFromGalTime: () => getDateFromGalTime,
|
|
54
|
-
getDateFromGloN: () => getDateFromGloN,
|
|
55
|
-
getDateFromGpsData: () => getDateFromGpsData,
|
|
56
|
-
getDateFromGpsTime: () => getDateFromGpsTime,
|
|
57
|
-
getDateFromHourCode: () => getDateFromHourCode,
|
|
58
|
-
getDateFromJulianDate: () => getDateFromJulianDate,
|
|
59
|
-
getDateFromMJD: () => getDateFromMJD,
|
|
60
|
-
getDateFromMJD2000: () => getDateFromMJD2000,
|
|
61
|
-
getDateFromRINEX: () => getDateFromRINEX,
|
|
62
|
-
getDateFromTAI: () => getDateFromTAI,
|
|
63
|
-
getDateFromTT: () => getDateFromTT,
|
|
64
|
-
getDateFromTimeOfDay: () => getDateFromTimeOfDay,
|
|
65
|
-
getDateFromUnixTime: () => getDateFromUnixTime,
|
|
66
|
-
getDayOfWeek: () => getDayOfWeek,
|
|
67
|
-
getDayOfYear: () => getDayOfYear,
|
|
68
|
-
getGalTime: () => getGalTime,
|
|
69
|
-
getGloN4: () => getGloN4,
|
|
70
|
-
getGloNA: () => getGloNA,
|
|
71
|
-
getGpsLeap: () => getGpsLeap,
|
|
72
|
-
getGpsTime: () => getGpsTime,
|
|
73
|
-
getHourCode: () => getHourCode,
|
|
74
|
-
getHoursFromTimeDifference: () => getHoursFromTimeDifference,
|
|
75
|
-
getJulianDate: () => getJulianDate,
|
|
76
|
-
getLeap: () => getLeap,
|
|
77
|
-
getMJD: () => getMJD,
|
|
78
|
-
getMJD2000: () => getMJD2000,
|
|
79
|
-
getMinutesFromTimeDifference: () => getMinutesFromTimeDifference,
|
|
80
|
-
getNtpTime: () => getNtpTime,
|
|
81
|
-
getRINEX: () => getRINEX,
|
|
82
|
-
getSecondsFromTimeDifference: () => getSecondsFromTimeDifference,
|
|
83
|
-
getTAIDate: () => getTAIDate,
|
|
84
|
-
getTTDate: () => getTTDate,
|
|
85
|
-
getTimeDifference: () => getTimeDifference,
|
|
86
|
-
getTimeDifferenceFromDays: () => getTimeDifferenceFromDays,
|
|
87
|
-
getTimeDifferenceFromHours: () => getTimeDifferenceFromHours,
|
|
88
|
-
getTimeDifferenceFromMinutes: () => getTimeDifferenceFromMinutes,
|
|
89
|
-
getTimeDifferenceFromObject: () => getTimeDifferenceFromObject,
|
|
90
|
-
getTimeDifferenceFromSeconds: () => getTimeDifferenceFromSeconds,
|
|
91
|
-
getTimeOfDay: () => getTimeOfDay,
|
|
92
|
-
getTimeOfWeek: () => getTimeOfWeek,
|
|
93
|
-
getTotalDaysFromTimeDifference: () => getTotalDaysFromTimeDifference,
|
|
94
|
-
getUnixTime: () => getUnixTime,
|
|
95
|
-
getUtcDate: () => getUtcDate,
|
|
96
|
-
getWeekNumber: () => getWeekNumber,
|
|
97
|
-
getWeekOfYear: () => getWeekOfYear
|
|
98
|
-
});
|
|
99
|
-
module.exports = __toCommonJS(src_exports);
|
|
100
|
-
|
|
101
1
|
// src/constants/time.ts
|
|
102
2
|
var SECONDS_IN_WEEK = 604800;
|
|
103
3
|
var SECONDS_IN_DAY = 86400;
|
|
@@ -110,14 +10,12 @@ var MILLISECONDS_IN_MINUTE = 6e4;
|
|
|
110
10
|
var MILLISECONDS_IN_SECOND = 1e3;
|
|
111
11
|
var MILLISECONDS_TT_TAI = 32184;
|
|
112
12
|
var MILLISECONDS_GPS_TAI = 19e3;
|
|
113
|
-
var START_LEAP_SECS_GPS = 19;
|
|
114
13
|
var START_GPS_TIME = /* @__PURE__ */ new Date("1980-01-06T00:00:00Z");
|
|
115
14
|
var START_GAL_TIME = /* @__PURE__ */ new Date("1999-08-22T00:00:00Z");
|
|
116
|
-
var START_BDS_TIME = /* @__PURE__ */ new Date("2006-01-01T00:00:
|
|
117
|
-
var START_UNIX_TIME = /* @__PURE__ */ new Date("
|
|
15
|
+
var START_BDS_TIME = /* @__PURE__ */ new Date("2006-01-01T00:00:13Z");
|
|
16
|
+
var START_UNIX_TIME = /* @__PURE__ */ new Date("1969-12-31T23:59:49Z");
|
|
118
17
|
var START_NTP_TIME = /* @__PURE__ */ new Date("1900-01-01T00:00:00Z");
|
|
119
18
|
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
19
|
var START_TAI_TIME = /* @__PURE__ */ new Date("1957-12-31T23:59:41Z");
|
|
122
20
|
var RINEX_CODES = [
|
|
123
21
|
"a",
|
|
@@ -145,12 +43,20 @@ var RINEX_CODES = [
|
|
|
145
43
|
"w",
|
|
146
44
|
"x"
|
|
147
45
|
];
|
|
148
|
-
var START_JULIAN_CALENDAR_UNIX_SECONDS = 24405875e-1;
|
|
149
46
|
var START_JULIAN_TAI = 24362045e-1;
|
|
150
47
|
var DAYS_MJD_JULIAN = 24000005e-1;
|
|
151
48
|
var DAYS_MJD2000_MJD = 51544.5;
|
|
152
49
|
var START_MJD_UNIX_SECONDS = 40587;
|
|
153
50
|
|
|
51
|
+
// src/types/enums.ts
|
|
52
|
+
var Scale = /* @__PURE__ */ ((Scale2) => {
|
|
53
|
+
Scale2[Scale2["TAI"] = 0] = "TAI";
|
|
54
|
+
Scale2[Scale2["TT"] = 1] = "TT";
|
|
55
|
+
Scale2[Scale2["GPS"] = 2] = "GPS";
|
|
56
|
+
Scale2[Scale2["UTC"] = 3] = "UTC";
|
|
57
|
+
return Scale2;
|
|
58
|
+
})(Scale || {});
|
|
59
|
+
|
|
154
60
|
// src/time/functions.ts
|
|
155
61
|
function getTimeOfDay(date) {
|
|
156
62
|
return (date.getTime() - Date.UTC(
|
|
@@ -264,6 +170,97 @@ function getTimeDifferenceFromObject(timeDifferenceObject) {
|
|
|
264
170
|
return getTimeDifferenceFromSeconds(seconds) + getTimeDifferenceFromMinutes(minutes) + getTimeDifferenceFromHours(hours) + getTimeDifferenceFromDays(days);
|
|
265
171
|
}
|
|
266
172
|
|
|
173
|
+
// src/time/utc.ts
|
|
174
|
+
function getLeap(date) {
|
|
175
|
+
const ntp_time = getNtpTime(date);
|
|
176
|
+
const leapSecondsMap = {
|
|
177
|
+
2272060800: 10,
|
|
178
|
+
// 1 Jan 1972
|
|
179
|
+
2287785600: 11,
|
|
180
|
+
// 1 Jul 1972
|
|
181
|
+
2303683200: 12,
|
|
182
|
+
// 1 Jan 1973
|
|
183
|
+
2335219200: 13,
|
|
184
|
+
// 1 Jan 1974
|
|
185
|
+
2366755200: 14,
|
|
186
|
+
// 1 Jan 1975
|
|
187
|
+
2398291200: 15,
|
|
188
|
+
// 1 Jan 1976
|
|
189
|
+
2429913600: 16,
|
|
190
|
+
// 1 Jan 1977
|
|
191
|
+
2461449600: 17,
|
|
192
|
+
// 1 Jan 1978
|
|
193
|
+
2492985600: 18,
|
|
194
|
+
// 1 Jan 1979
|
|
195
|
+
2524521600: 19,
|
|
196
|
+
// 1 Jan 1980
|
|
197
|
+
2571782400: 20,
|
|
198
|
+
// 1 Jul 1981
|
|
199
|
+
2603318400: 21,
|
|
200
|
+
// 1 Jul 1982
|
|
201
|
+
2634854400: 22,
|
|
202
|
+
// 1 Jul 1983
|
|
203
|
+
2698012800: 23,
|
|
204
|
+
// 1 Jul 1985
|
|
205
|
+
2776982400: 24,
|
|
206
|
+
// 1 Jan 1988
|
|
207
|
+
2840140800: 25,
|
|
208
|
+
// 1 Jan 1990
|
|
209
|
+
2871676800: 26,
|
|
210
|
+
// 1 Jan 1991
|
|
211
|
+
2918937600: 27,
|
|
212
|
+
// 1 Jul 1992
|
|
213
|
+
2950473600: 28,
|
|
214
|
+
// 1 Jul 1993
|
|
215
|
+
2982009600: 29,
|
|
216
|
+
// 1 Jul 1994
|
|
217
|
+
3029443200: 30,
|
|
218
|
+
// 1 Jan 1996
|
|
219
|
+
3076704e3: 31,
|
|
220
|
+
// 1 Jul 1997
|
|
221
|
+
3124137600: 32,
|
|
222
|
+
// 1 Jan 1999
|
|
223
|
+
3345062400: 33,
|
|
224
|
+
// 1 Jan 2006
|
|
225
|
+
3439756800: 34,
|
|
226
|
+
// 1 Jan 2009
|
|
227
|
+
3550089600: 35,
|
|
228
|
+
// 1 Jul 2012
|
|
229
|
+
3644697600: 36,
|
|
230
|
+
// 1 Jul 2015
|
|
231
|
+
3692217600: 37
|
|
232
|
+
// 1 Jan 2017
|
|
233
|
+
};
|
|
234
|
+
for (const [timestamp, leapSeconds] of Object.entries(
|
|
235
|
+
leapSecondsMap
|
|
236
|
+
).reverse()) {
|
|
237
|
+
if (ntp_time / MILLISECONDS_IN_SECOND - leapSeconds >= Number(timestamp)) {
|
|
238
|
+
return leapSeconds;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return 8;
|
|
242
|
+
}
|
|
243
|
+
function getGpsLeap(date) {
|
|
244
|
+
const leap_seconds = getLeap(date);
|
|
245
|
+
if (leap_seconds < 0) return 0;
|
|
246
|
+
return leap_seconds - 19;
|
|
247
|
+
}
|
|
248
|
+
function getUtcDate(date) {
|
|
249
|
+
const tai_date = getTaiDate(date);
|
|
250
|
+
const leap_seconds = getLeap(date);
|
|
251
|
+
return new Date(tai_date.getTime() - leap_seconds * MILLISECONDS_IN_SECOND);
|
|
252
|
+
}
|
|
253
|
+
function getDateFromUtc(utc_date) {
|
|
254
|
+
const tai_date = new Date(
|
|
255
|
+
utc_date.getTime() + getLeap(utc_date) * MILLISECONDS_IN_SECOND
|
|
256
|
+
);
|
|
257
|
+
const leap_seconds = getLeap(getDateFromTai(tai_date));
|
|
258
|
+
const gps_date = getDateFromTai(
|
|
259
|
+
new Date(utc_date.getTime() + leap_seconds * MILLISECONDS_IN_SECOND)
|
|
260
|
+
);
|
|
261
|
+
return gps_date;
|
|
262
|
+
}
|
|
263
|
+
|
|
267
264
|
// src/time/gnss.ts
|
|
268
265
|
function getGpsTime(date) {
|
|
269
266
|
return date.getTime() - START_GPS_TIME.getTime();
|
|
@@ -284,10 +281,11 @@ function getDateFromBdsTime(bdsTime) {
|
|
|
284
281
|
return new Date(bdsTime + START_BDS_TIME.getTime());
|
|
285
282
|
}
|
|
286
283
|
function getUnixTime(date) {
|
|
287
|
-
|
|
284
|
+
const utc_date = getUtcDate(date);
|
|
285
|
+
return utc_date.getTime();
|
|
288
286
|
}
|
|
289
287
|
function getDateFromUnixTime(unixTime) {
|
|
290
|
-
return new Date(unixTime
|
|
288
|
+
return getDateFromUtc(new Date(unixTime));
|
|
291
289
|
}
|
|
292
290
|
function getWeekNumber(date) {
|
|
293
291
|
return Math.floor(getGpsTime(date) / MILLISECONDS_IN_WEEK);
|
|
@@ -300,16 +298,16 @@ function getDateFromGpsData(weekNumber, timeOfWeek) {
|
|
|
300
298
|
weekNumber * MILLISECONDS_IN_WEEK + timeOfWeek * MILLISECONDS_IN_SECOND + START_GPS_TIME.getTime()
|
|
301
299
|
);
|
|
302
300
|
}
|
|
303
|
-
function
|
|
301
|
+
function getTaiDate(date) {
|
|
304
302
|
return new Date(date.getTime() + MILLISECONDS_GPS_TAI);
|
|
305
303
|
}
|
|
306
|
-
function
|
|
304
|
+
function getDateFromTai(tai_date) {
|
|
307
305
|
return new Date(tai_date.getTime() - MILLISECONDS_GPS_TAI);
|
|
308
306
|
}
|
|
309
|
-
function
|
|
307
|
+
function getTtDate(date) {
|
|
310
308
|
return new Date(date.getTime() + MILLISECONDS_GPS_TAI + MILLISECONDS_TT_TAI);
|
|
311
309
|
}
|
|
312
|
-
function
|
|
310
|
+
function getDateFromTt(tt_date) {
|
|
313
311
|
return new Date(
|
|
314
312
|
tt_date.getTime() - MILLISECONDS_GPS_TAI - MILLISECONDS_TT_TAI
|
|
315
313
|
);
|
|
@@ -332,7 +330,7 @@ function getDateFromGloN(n4, na, tod) {
|
|
|
332
330
|
return date;
|
|
333
331
|
}
|
|
334
332
|
function getNtpTime(date) {
|
|
335
|
-
return
|
|
333
|
+
return getTaiDate(date).getTime() - START_NTP_TIME.getTime();
|
|
336
334
|
}
|
|
337
335
|
|
|
338
336
|
// src/time/rinex.ts
|
|
@@ -364,111 +362,57 @@ function getDateFromRINEX(rinex) {
|
|
|
364
362
|
return date;
|
|
365
363
|
}
|
|
366
364
|
|
|
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
365
|
// src/time/julian.ts
|
|
450
|
-
function getJulianDate(date) {
|
|
451
|
-
|
|
366
|
+
function getJulianDate(date, scale = 1 /* TT */) {
|
|
367
|
+
if (scale === 0 /* TAI */) {
|
|
368
|
+
return (date.getTime() - START_TAI_TIME.getTime()) / MILLISECONDS_IN_DAY + START_JULIAN_TAI;
|
|
369
|
+
}
|
|
370
|
+
if (scale === 2 /* GPS */) {
|
|
371
|
+
return (date.getTime() - START_TAI_TIME.getTime() - MILLISECONDS_GPS_TAI) / MILLISECONDS_IN_DAY + START_JULIAN_TAI;
|
|
372
|
+
}
|
|
373
|
+
if (scale === 3 /* UTC */) {
|
|
374
|
+
return (date.getTime() - START_TAI_TIME.getTime() - getLeap(date) * MILLISECONDS_IN_SECOND) / MILLISECONDS_IN_DAY + START_JULIAN_TAI;
|
|
375
|
+
}
|
|
376
|
+
return (date.getTime() - START_TAI_TIME.getTime() + MILLISECONDS_TT_TAI) / MILLISECONDS_IN_DAY + START_JULIAN_TAI;
|
|
452
377
|
}
|
|
453
|
-
function getDateFromJulianDate(julianDate) {
|
|
378
|
+
function getDateFromJulianDate(julianDate, scale = 1 /* TT */) {
|
|
379
|
+
if (scale === 0 /* TAI */) {
|
|
380
|
+
return new Date(
|
|
381
|
+
(julianDate - START_JULIAN_TAI) * MILLISECONDS_IN_DAY + START_TAI_TIME.getTime()
|
|
382
|
+
);
|
|
383
|
+
}
|
|
384
|
+
if (scale === 2 /* GPS */) {
|
|
385
|
+
return new Date(
|
|
386
|
+
(julianDate - START_JULIAN_TAI) * MILLISECONDS_IN_DAY + START_TAI_TIME.getTime() + MILLISECONDS_GPS_TAI
|
|
387
|
+
);
|
|
388
|
+
}
|
|
389
|
+
if (scale === 3 /* UTC */) {
|
|
390
|
+
const utc_date = new Date(
|
|
391
|
+
(julianDate - START_JULIAN_TAI) * MILLISECONDS_IN_DAY + START_TAI_TIME.getTime()
|
|
392
|
+
);
|
|
393
|
+
const tai_date = new Date(
|
|
394
|
+
utc_date.getTime() + getLeap(utc_date) * MILLISECONDS_IN_SECOND
|
|
395
|
+
);
|
|
396
|
+
const leap_seconds = getLeap(getDateFromTai(tai_date));
|
|
397
|
+
return new Date(utc_date.getTime() + leap_seconds * MILLISECONDS_IN_SECOND);
|
|
398
|
+
}
|
|
454
399
|
return new Date(
|
|
455
|
-
(julianDate -
|
|
400
|
+
(julianDate - START_JULIAN_TAI) * MILLISECONDS_IN_DAY + START_TAI_TIME.getTime() - MILLISECONDS_TT_TAI
|
|
456
401
|
);
|
|
457
402
|
}
|
|
458
|
-
function getMJD(date) {
|
|
459
|
-
return getJulianDate(date) - DAYS_MJD_JULIAN;
|
|
403
|
+
function getMJD(date, scale = 1 /* TT */) {
|
|
404
|
+
return getJulianDate(date, scale) - DAYS_MJD_JULIAN;
|
|
460
405
|
}
|
|
461
|
-
function getDateFromMJD(mjd) {
|
|
462
|
-
return getDateFromJulianDate(mjd + DAYS_MJD_JULIAN);
|
|
406
|
+
function getDateFromMJD(mjd, scale = 1 /* TT */) {
|
|
407
|
+
return getDateFromJulianDate(mjd + DAYS_MJD_JULIAN, scale);
|
|
463
408
|
}
|
|
464
|
-
function getMJD2000(date) {
|
|
465
|
-
return getMJD(date) - DAYS_MJD2000_MJD;
|
|
409
|
+
function getMJD2000(date, scale = 1 /* TT */) {
|
|
410
|
+
return getMJD(date, scale) - DAYS_MJD2000_MJD;
|
|
466
411
|
}
|
|
467
|
-
function getDateFromMJD2000(mjd2000) {
|
|
468
|
-
return getDateFromMJD(mjd2000 + DAYS_MJD2000_MJD);
|
|
412
|
+
function getDateFromMJD2000(mjd2000, scale = 1 /* TT */) {
|
|
413
|
+
return getDateFromMJD(mjd2000 + DAYS_MJD2000_MJD, scale);
|
|
469
414
|
}
|
|
470
|
-
|
|
471
|
-
0 && (module.exports = {
|
|
415
|
+
export {
|
|
472
416
|
DAYS_MJD2000_MJD,
|
|
473
417
|
DAYS_MJD_JULIAN,
|
|
474
418
|
MILLISECONDS_GPS_TAI,
|
|
@@ -487,14 +431,12 @@ function getDateFromMJD2000(mjd2000) {
|
|
|
487
431
|
START_GAL_TIME,
|
|
488
432
|
START_GLO_LEAP,
|
|
489
433
|
START_GPS_TIME,
|
|
490
|
-
START_JULIAN_CALENDAR_UNIX_SECONDS,
|
|
491
434
|
START_JULIAN_TAI,
|
|
492
|
-
START_LEAP_SECS_GPS,
|
|
493
|
-
START_MJD2000_TIME,
|
|
494
435
|
START_MJD_UNIX_SECONDS,
|
|
495
436
|
START_NTP_TIME,
|
|
496
437
|
START_TAI_TIME,
|
|
497
438
|
START_UNIX_TIME,
|
|
439
|
+
Scale,
|
|
498
440
|
getBdsTime,
|
|
499
441
|
getDateFromBdsTime,
|
|
500
442
|
getDateFromDayOfWeek,
|
|
@@ -508,10 +450,11 @@ function getDateFromMJD2000(mjd2000) {
|
|
|
508
450
|
getDateFromMJD,
|
|
509
451
|
getDateFromMJD2000,
|
|
510
452
|
getDateFromRINEX,
|
|
511
|
-
|
|
512
|
-
getDateFromTT,
|
|
453
|
+
getDateFromTai,
|
|
513
454
|
getDateFromTimeOfDay,
|
|
455
|
+
getDateFromTt,
|
|
514
456
|
getDateFromUnixTime,
|
|
457
|
+
getDateFromUtc,
|
|
515
458
|
getDayOfWeek,
|
|
516
459
|
getDayOfYear,
|
|
517
460
|
getGalTime,
|
|
@@ -529,8 +472,7 @@ function getDateFromMJD2000(mjd2000) {
|
|
|
529
472
|
getNtpTime,
|
|
530
473
|
getRINEX,
|
|
531
474
|
getSecondsFromTimeDifference,
|
|
532
|
-
|
|
533
|
-
getTTDate,
|
|
475
|
+
getTaiDate,
|
|
534
476
|
getTimeDifference,
|
|
535
477
|
getTimeDifferenceFromDays,
|
|
536
478
|
getTimeDifferenceFromHours,
|
|
@@ -540,8 +482,9 @@ function getDateFromMJD2000(mjd2000) {
|
|
|
540
482
|
getTimeOfDay,
|
|
541
483
|
getTimeOfWeek,
|
|
542
484
|
getTotalDaysFromTimeDifference,
|
|
485
|
+
getTtDate,
|
|
543
486
|
getUnixTime,
|
|
544
487
|
getUtcDate,
|
|
545
488
|
getWeekNumber,
|
|
546
489
|
getWeekOfYear
|
|
547
|
-
}
|
|
490
|
+
};
|
package/jest.config.ts
ADDED
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gnss-js",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Tool to peform GNSS-related computations",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
8
|
+
"type": "module",
|
|
8
9
|
"scripts": {
|
|
9
10
|
"build": "tsup",
|
|
10
11
|
"test": "jest",
|
|
@@ -22,7 +23,8 @@
|
|
|
22
23
|
"jest": "^29.7.0",
|
|
23
24
|
"prettier": "^3.5.3",
|
|
24
25
|
"ts-jest": "^29.3.2",
|
|
26
|
+
"ts-node": "^10.9.2",
|
|
25
27
|
"tsup": "^8.0.2",
|
|
26
|
-
"typescript": "^5.
|
|
28
|
+
"typescript": "^5.8.3"
|
|
27
29
|
}
|
|
28
30
|
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getHourCode,
|
|
3
|
+
getDayOfYear,
|
|
4
|
+
getDateFromHourCode,
|
|
5
|
+
getDayOfWeek,
|
|
6
|
+
getDateFromDayOfWeek,
|
|
7
|
+
getTimeOfDay,
|
|
8
|
+
getDateFromTimeOfDay,
|
|
9
|
+
getDateFromDayOfYear,
|
|
10
|
+
getWeekOfYear,
|
|
11
|
+
} from '../src/index';
|
|
12
|
+
|
|
13
|
+
test('getTimeOfDay', () => {
|
|
14
|
+
const date: Date = new Date('1980-01-06T23:09:00Z');
|
|
15
|
+
const time_of_day: number = getTimeOfDay(date);
|
|
16
|
+
expect(time_of_day).toBe(83340);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test('getDateFromTimeOfDay', () => {
|
|
20
|
+
const date: Date = new Date('1980-01-06T00:00:00Z');
|
|
21
|
+
const new_date: Date = getDateFromTimeOfDay(83340, date);
|
|
22
|
+
expect(new_date.toISOString()).toBe('1980-01-06T23:09:00.000Z');
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
test('getDayOfYear', () => {
|
|
26
|
+
const date: Date = new Date('1980-01-06T23:09:00Z');
|
|
27
|
+
const day_of_year: Date = getDayOfYear(date);
|
|
28
|
+
expect(day_of_year).toBe(6);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test('getDateFromDayOfYear', () => {
|
|
32
|
+
const date: Date = new Date('1980-01-06T00:00:00Z');
|
|
33
|
+
const new_date: Date = getDateFromDayOfYear(100, date);
|
|
34
|
+
expect(new_date.toISOString()).toBe('1980-04-09T00:00:00.000Z');
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test('getHourCode', () => {
|
|
38
|
+
const date: Date = new Date('1980-01-06T00:00:00Z');
|
|
39
|
+
const hour_code: Date = getHourCode(date);
|
|
40
|
+
expect(hour_code).toBe('a');
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test('getDateFromHourCode', () => {
|
|
44
|
+
const date: Date = new Date('1980-01-06T00:00:00Z');
|
|
45
|
+
const new_date: Date = getDateFromHourCode('c', date);
|
|
46
|
+
expect(new_date.toISOString()).toBe('1980-01-06T02:00:00.000Z');
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
test('getDayOfWeek', () => {
|
|
50
|
+
const date: Date = new Date('1980-01-06T00:00:00Z');
|
|
51
|
+
expect(getDayOfWeek(date)).toBe(0);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test('getDateFromDayOfWeek', () => {
|
|
55
|
+
const date: Date = new Date('1980-01-06T00:00:00Z');
|
|
56
|
+
const new_date: Date = getDateFromDayOfWeek(1, date);
|
|
57
|
+
expect(new_date.toISOString()).toBe('1980-01-07T00:00:00.000Z');
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
test('getWeekOfYear', () => {
|
|
61
|
+
const date: Date = new Date('2025-05-05T00:00:00Z');
|
|
62
|
+
expect(getWeekOfYear(date)).toBe(19);
|
|
63
|
+
});
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getGpsTime,
|
|
3
|
+
getDateFromGpsTime,
|
|
4
|
+
getGalTime,
|
|
5
|
+
getDateFromGalTime,
|
|
6
|
+
getBdsTime,
|
|
7
|
+
getDateFromBdsTime,
|
|
8
|
+
getUnixTime,
|
|
9
|
+
getDateFromUnixTime,
|
|
10
|
+
getTaiDate,
|
|
11
|
+
getTtDate,
|
|
12
|
+
getDateFromTai,
|
|
13
|
+
getDateFromTt,
|
|
14
|
+
getWeekNumber,
|
|
15
|
+
getDateFromGpsData,
|
|
16
|
+
} from '../src/index';
|
|
17
|
+
|
|
18
|
+
test('getGpsTime', () => {
|
|
19
|
+
const gps_time: number = getGpsTime(new Date('1980-01-06T00:00:00Z'));
|
|
20
|
+
expect(gps_time).toBe(0);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
test('getDateFromGpsTime', () => {
|
|
24
|
+
const date: Date = getDateFromGpsTime(0);
|
|
25
|
+
expect(date.getTime()).toBe(new Date('1980-01-06T00:00:00Z').getTime());
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test('getWeekNumber', () => {
|
|
29
|
+
const week_no: number = getWeekNumber(new Date('1980-01-06T00:00:00Z'));
|
|
30
|
+
expect(week_no).toBe(0);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test('getTimeOfWeek', () => {
|
|
34
|
+
const tow: number = getWeekNumber(new Date('1980-01-06T00:00:00Z'));
|
|
35
|
+
expect(tow).toBe(0);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test('getDateFromGpsData', () => {
|
|
39
|
+
const date: Date = getDateFromGpsData(0, 0);
|
|
40
|
+
expect(date.getTime()).toBe(new Date('1980-01-06T00:00:00Z').getTime());
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test('getGalTime', () => {
|
|
44
|
+
const gal_time: number = getGalTime(new Date('1999-08-22T00:00:00Z'));
|
|
45
|
+
expect(gal_time).toBe(0);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
test('getDateFromGalTime', () => {
|
|
49
|
+
const date: Date = getDateFromGalTime(0);
|
|
50
|
+
expect(date.getTime()).toBe(new Date('1999-08-22T00:00:00Z').getTime());
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
test('getBdsTime', () => {
|
|
54
|
+
const bds_time: number = getBdsTime(new Date('2006-01-01T00:00:13Z'));
|
|
55
|
+
expect(bds_time).toBe(0);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
test('getDateFromBdsTime', () => {
|
|
59
|
+
const date: Date = getDateFromBdsTime(0);
|
|
60
|
+
expect(date.getTime()).toBe(new Date('2006-01-01T00:00:13Z').getTime());
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test('getUnixTime', () => {
|
|
64
|
+
const unix_time = getUnixTime(new Date('2025-01-01T00:00:18Z'));
|
|
65
|
+
expect(unix_time).toBe(1735689600000);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test('getDateFromUnixTime', () => {
|
|
69
|
+
const date: Date = getDateFromUnixTime(0);
|
|
70
|
+
expect(date.toISOString()).toBe('1969-12-31T23:59:49.000Z');
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
test('getTaiDate', () => {
|
|
74
|
+
const date: Date = getDateFromGpsTime(0);
|
|
75
|
+
const tai_date: Date = getTaiDate(date);
|
|
76
|
+
expect(tai_date.getTime()).toBe(new Date('1980-01-06T00:00:19Z').getTime());
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
test('getDateFromTai', () => {
|
|
80
|
+
const date: Date = getDateFromTai(new Date('1980-01-06T00:00:19Z'));
|
|
81
|
+
expect(getGpsTime(date)).toBe(0);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
test('getTtDate', () => {
|
|
85
|
+
const date: Date = getDateFromGpsTime(0);
|
|
86
|
+
const tt_date: Date = getTtDate(date);
|
|
87
|
+
expect(tt_date.getTime()).toBe(
|
|
88
|
+
new Date('1980-01-06T00:00:51.184Z').getTime()
|
|
89
|
+
);
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
test('getDateFromTt', () => {
|
|
93
|
+
const date: Date = getDateFromTt(new Date('1980-01-06T00:00:51.184Z'));
|
|
94
|
+
expect(getGpsTime(date)).toBe(0);
|
|
95
|
+
});
|