@dative-gpi/foundation-shared-services 0.0.100 → 0.0.102
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.
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { format, subDays, addDays, addMilliseconds, parse } from "date-fns";
|
|
3
2
|
import { enUS, enGB, fr, it, es, de, Locale } from "date-fns/locale";
|
|
4
|
-
import {
|
|
3
|
+
import { computed, ref } from "vue";
|
|
5
4
|
|
|
6
5
|
import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
|
|
7
6
|
import { TimeZoneInfos } from "@dative-gpi/foundation-shared-domain/models";
|
|
7
|
+
import { isoTimeFormat } from "@dative-gpi/foundation-shared-domain/tools";
|
|
8
8
|
|
|
9
9
|
import { useAppLanguageCode } from "./useAppLanguageCode";
|
|
10
10
|
|
|
@@ -15,6 +15,46 @@ export const useAppTimeZone = () => {
|
|
|
15
15
|
timeZone.value = payload;
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
+
const getOffsetNumber = (offsetString: string, hours: boolean = false): number => {
|
|
19
|
+
let offset = 0;
|
|
20
|
+
switch (offsetString.toLowerCase().replaceAll(" ", "")) {
|
|
21
|
+
case "utc-11:00:00": offset = -11; break;
|
|
22
|
+
case "utc-10:00:00": offset = -10; break;
|
|
23
|
+
case "utc-09:00:00": offset = -9; break;
|
|
24
|
+
case "utc-08:00:00": offset = -8; break;
|
|
25
|
+
case "utc-07:00:00": offset = -7; break;
|
|
26
|
+
case "utc-06:00:00": offset = -6; break;
|
|
27
|
+
case "utc-05:00:00": offset = -5; break;
|
|
28
|
+
case "utc-04:00:00": offset = -4; break;
|
|
29
|
+
case "utc-03:00:00": offset = -3; break;
|
|
30
|
+
case "utc-02:00:00": offset = -2; break;
|
|
31
|
+
case "utc-01:00:00": offset = -1; break;
|
|
32
|
+
case "utc+01:00:00": offset = +1; break;
|
|
33
|
+
case "utc+02:00:00": offset = +2; break;
|
|
34
|
+
case "utc+03:00:00": offset = +3; break;
|
|
35
|
+
case "utc+04:00:00": offset = +4; break;
|
|
36
|
+
case "utc+05:00:00": offset = +5; break;
|
|
37
|
+
case "utc+06:00:00": offset = +6; break;
|
|
38
|
+
case "utc+07:00:00": offset = +7; break;
|
|
39
|
+
case "utc+08:00:00": offset = +8; break;
|
|
40
|
+
case "utc+09:00:00": offset = +9; break;
|
|
41
|
+
case "utc+10:00:00": offset = +10; break;
|
|
42
|
+
case "utc+11:00:00": offset = +11; break;
|
|
43
|
+
case "utc+12:00:00": offset = +12; break;
|
|
44
|
+
case "utc+13:00:00": offset = +13; break;
|
|
45
|
+
case "utc+14:00:00": offset = +14; break;
|
|
46
|
+
}
|
|
47
|
+
return hours ? offset : offset * 60 * 60 * 1000;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const userOffset = (): number => {
|
|
51
|
+
return getOffsetNumber(getUserOffset());
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const machineOffset = (): number => {
|
|
55
|
+
return getOffsetNumber(getMachineOffset());
|
|
56
|
+
};
|
|
57
|
+
|
|
18
58
|
const getUserOffset = (): string => {
|
|
19
59
|
return timeZone?.value?.offset ?? "UTC +00:00:00";
|
|
20
60
|
};
|
|
@@ -74,7 +114,7 @@ export const useAppTimeZone = () => {
|
|
|
74
114
|
today.setHours(0, 0, 0, 0);
|
|
75
115
|
}
|
|
76
116
|
return today.getTime() + getMachineOffsetMillis() - getUserOffsetMillis();
|
|
77
|
-
}
|
|
117
|
+
};
|
|
78
118
|
|
|
79
119
|
const pickerToEpoch = (value: Date | null | undefined): number => {
|
|
80
120
|
if (value != null) {
|
|
@@ -179,7 +219,31 @@ export const useAppTimeZone = () => {
|
|
|
179
219
|
case "de-DE": return de;
|
|
180
220
|
default: return enUS;
|
|
181
221
|
}
|
|
182
|
-
}
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
const parseForPicker = (value: string, dateFormat: string = isoTimeFormat()): number | null => {
|
|
225
|
+
let date = parse(value!, dateFormat, new Date());
|
|
226
|
+
date = addMilliseconds(date, userOffset());
|
|
227
|
+
if (!isFinite(date.getTime())) {
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
return date.getTime();
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
const formatCurrentForPicker = (daysOffset: number = -1): string => {
|
|
234
|
+
let date = new Date();
|
|
235
|
+
date.setSeconds(0, 0);
|
|
236
|
+
date = addMilliseconds(addDays(date, daysOffset), -machineOffset());
|
|
237
|
+
return format(date, isoTimeFormat());
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
const formatFromPicker = (date: number | null): string => {
|
|
241
|
+
if (date != null) {
|
|
242
|
+
const epoch = date - machineOffset() + (machineOffset() - userOffset());
|
|
243
|
+
return format(epoch, isoTimeFormat());
|
|
244
|
+
}
|
|
245
|
+
return "";
|
|
246
|
+
};
|
|
183
247
|
|
|
184
248
|
const ready = computed(() => timeZone.value !== null);
|
|
185
249
|
|
|
@@ -198,6 +262,9 @@ export const useAppTimeZone = () => {
|
|
|
198
262
|
epochToLongDateFormat,
|
|
199
263
|
epochToLongTimeFormat,
|
|
200
264
|
epochToShortDateFormat,
|
|
201
|
-
epochToShortTimeFormat
|
|
265
|
+
epochToShortTimeFormat,
|
|
266
|
+
parseForPicker,
|
|
267
|
+
formatCurrentForPicker,
|
|
268
|
+
formatFromPicker
|
|
202
269
|
};
|
|
203
270
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dative-gpi/foundation-shared-services",
|
|
3
3
|
"sideEffects": false,
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.102",
|
|
5
5
|
"description": "",
|
|
6
6
|
"publishConfig": {
|
|
7
7
|
"access": "public"
|
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
"license": "ISC",
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@dative-gpi/bones-ui": "^0.0.73",
|
|
14
|
-
"@dative-gpi/foundation-shared-domain": "0.0.
|
|
14
|
+
"@dative-gpi/foundation-shared-domain": "0.0.102",
|
|
15
15
|
"@microsoft/signalr": "^8.0.0",
|
|
16
16
|
"vue": "^3.4.23",
|
|
17
17
|
"vue-router": "^4.2.5"
|
|
18
18
|
},
|
|
19
|
-
"gitHead": "
|
|
19
|
+
"gitHead": "d2534b5fa79d557769bcdfd5da4b8dffa0f42c3e"
|
|
20
20
|
}
|