@beinformed/ui 1.59.2 → 1.59.4
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/CHANGELOG.md +14 -0
- package/esm/models/attributes/DatetimeAttributeModel.js +30 -13
- package/esm/models/attributes/DatetimeAttributeModel.js.map +1 -1
- package/esm/utils/datetime/DateTimeUtil.js +26 -4
- package/esm/utils/datetime/DateTimeUtil.js.map +1 -1
- package/lib/models/attributes/DatetimeAttributeModel.js +30 -13
- package/lib/models/attributes/DatetimeAttributeModel.js.flow +32 -14
- package/lib/models/attributes/DatetimeAttributeModel.js.map +1 -1
- package/lib/models/attributes/__tests__/DatetimeAttributeModel.spec.js.flow +29 -0
- package/lib/models/attributes/__tests__/DatetimeAttributeModel_offset.spec.js.flow +17 -0
- package/lib/utils/datetime/DateTimeUtil.js +26 -4
- package/lib/utils/datetime/DateTimeUtil.js.flow +26 -2
- package/lib/utils/datetime/DateTimeUtil.js.map +1 -1
- package/lib/utils/datetime/__tests__/DateTime.spec.js.flow +7 -0
- package/lib/utils/datetime/__tests__/DateTimeFormat.spec.js.flow +146 -0
- package/package.json +1 -1
- package/src/models/attributes/DatetimeAttributeModel.js +32 -14
- package/src/models/attributes/__tests__/DatetimeAttributeModel.spec.js +29 -0
- package/src/models/attributes/__tests__/DatetimeAttributeModel_offset.spec.js +17 -0
- package/src/utils/datetime/DateTimeUtil.js +26 -2
- package/src/utils/datetime/__tests__/DateTime.spec.js +7 -0
- package/src/utils/datetime/__tests__/DateTimeFormat.spec.js +146 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { TimestampUtil } from "../DateTimeUtil";
|
|
2
|
+
import { INCLUDE_TIME_OFFSET, setSettings } from "../../../constants";
|
|
3
|
+
|
|
4
|
+
const timestamp = "2023-06-07T07:04:01.010+02:00";
|
|
5
|
+
|
|
6
|
+
describe("date time format conversion", () => {
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
TimestampUtil.setTimeZone("Europe/Amsterdam");
|
|
9
|
+
setSettings({ [INCLUDE_TIME_OFFSET]: true });
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
test("Year", () => {
|
|
13
|
+
expect(TimestampUtil.toFormat(timestamp, "yy")).toBe("23");
|
|
14
|
+
expect(TimestampUtil.toFormat(timestamp, "yyyy")).toBe("2023");
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test("Month", () => {
|
|
18
|
+
expect(TimestampUtil.toFormat(timestamp, "M")).toBe("6");
|
|
19
|
+
expect(TimestampUtil.toFormat(timestamp, "MM")).toBe("06");
|
|
20
|
+
expect(TimestampUtil.toFormat(timestamp, "MMM")).toBe("Jun");
|
|
21
|
+
expect(TimestampUtil.toFormat(timestamp, "MMMM")).toBe("June");
|
|
22
|
+
expect(TimestampUtil.toFormat(timestamp, "MMMMM")).toBe("J");
|
|
23
|
+
|
|
24
|
+
expect(TimestampUtil.toFormat(timestamp, "L")).toBe("6");
|
|
25
|
+
expect(TimestampUtil.toFormat(timestamp, "LL")).toBe("06");
|
|
26
|
+
expect(TimestampUtil.toFormat(timestamp, "LLL")).toBe("Jun");
|
|
27
|
+
expect(TimestampUtil.toFormat(timestamp, "LLLL")).toBe("June");
|
|
28
|
+
expect(TimestampUtil.toFormat(timestamp, "LLLLL")).toBe("J");
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test("Day", () => {
|
|
32
|
+
expect(TimestampUtil.toFormat(timestamp, "d")).toBe("7");
|
|
33
|
+
expect(TimestampUtil.toFormat(timestamp, "dd")).toBe("07");
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test("Quarter", () => {
|
|
37
|
+
expect(TimestampUtil.toFormat(timestamp, "Q")).toBe("2");
|
|
38
|
+
expect(TimestampUtil.toFormat(timestamp, "QQ")).toBe("02");
|
|
39
|
+
expect(TimestampUtil.toFormat(timestamp, "QQQ")).toBe("Q2");
|
|
40
|
+
expect(TimestampUtil.toFormat(timestamp, "QQQQ")).toBe("2nd quarter");
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test.skip("Day of Year", () => {
|
|
44
|
+
expect(TimestampUtil.toFormat(timestamp, "D")).toBe("7");
|
|
45
|
+
expect(TimestampUtil.toFormat(timestamp, "DD")).toBe("07");
|
|
46
|
+
expect(TimestampUtil.toFormat(timestamp, "DDD")).toBe("07");
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
test("Day of Week", () => {
|
|
50
|
+
expect(TimestampUtil.toFormat(timestamp, "E")).toBe("Wed");
|
|
51
|
+
expect(TimestampUtil.toFormat(timestamp, "EEEE")).toBe("Wednesday");
|
|
52
|
+
expect(TimestampUtil.toFormat(timestamp, "EEEEE")).toBe("W");
|
|
53
|
+
|
|
54
|
+
expect(TimestampUtil.toFormat(timestamp, "e")).toBe("3");
|
|
55
|
+
expect(TimestampUtil.toFormat(timestamp, "ee")).toBe("03");
|
|
56
|
+
expect(TimestampUtil.toFormat(timestamp, "eee")).toBe("Wed");
|
|
57
|
+
expect(TimestampUtil.toFormat(timestamp, "eeee")).toBe("Wednesday");
|
|
58
|
+
expect(TimestampUtil.toFormat(timestamp, "eeeee")).toBe("W");
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
test("Week", () => {
|
|
62
|
+
expect(TimestampUtil.toFormat(timestamp, "w")).toBe("23");
|
|
63
|
+
// expect(TimestampUtil.toFormat(timestamp, "W")).toBe("23");
|
|
64
|
+
// expect(TimestampUtil.toFormat(timestamp, "F")).toBe("W");
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
test("Hour", () => {
|
|
68
|
+
expect(TimestampUtil.toFormat(timestamp, "H")).toBe("7");
|
|
69
|
+
expect(TimestampUtil.toFormat(timestamp, "HH")).toBe("07");
|
|
70
|
+
expect(TimestampUtil.toFormat(timestamp, "h")).toBe("7");
|
|
71
|
+
expect(TimestampUtil.toFormat(timestamp, "hh")).toBe("07");
|
|
72
|
+
|
|
73
|
+
expect(TimestampUtil.toFormat(timestamp, "a")).toBe("AM");
|
|
74
|
+
expect(TimestampUtil.toFormat(timestamp, "aa")).toBe("AM");
|
|
75
|
+
expect(TimestampUtil.toFormat(timestamp, "aaa")).toBe("am");
|
|
76
|
+
expect(TimestampUtil.toFormat(timestamp, "aaaa")).toBe("a.m.");
|
|
77
|
+
expect(TimestampUtil.toFormat(timestamp, "aaaaa")).toBe("a");
|
|
78
|
+
|
|
79
|
+
expect(TimestampUtil.toFormat(timestamp, "K")).toBe("7");
|
|
80
|
+
expect(TimestampUtil.toFormat(timestamp, "k")).toBe("7");
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
test("Minute", () => {
|
|
84
|
+
expect(TimestampUtil.toFormat(timestamp, "m")).toBe("4");
|
|
85
|
+
expect(TimestampUtil.toFormat(timestamp, "mm")).toBe("04");
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
test("Seconds", () => {
|
|
89
|
+
expect(TimestampUtil.toFormat(timestamp, "s")).toBe("1");
|
|
90
|
+
expect(TimestampUtil.toFormat(timestamp, "ss")).toBe("01");
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
test("Milliseconds", () => {
|
|
94
|
+
expect(TimestampUtil.toFormat(timestamp, "SSS")).toBe("010");
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
test("Zone / offset", () => {
|
|
98
|
+
expect(TimestampUtil.toFormat(timestamp, "z")).toBe("GMT+2");
|
|
99
|
+
expect(TimestampUtil.toFormat(timestamp, "zz")).toBe("GMT+2");
|
|
100
|
+
expect(TimestampUtil.toFormat(timestamp, "zzz")).toBe("GMT+2");
|
|
101
|
+
expect(TimestampUtil.toFormat(timestamp, "zzzz")).toBe("GMT+02:00");
|
|
102
|
+
expect(TimestampUtil.toFormat(timestamp, "zzzzz")).toBe("GMT+02:00");
|
|
103
|
+
|
|
104
|
+
expect(TimestampUtil.toFormat(timestamp, "X")).toBe("+02");
|
|
105
|
+
expect(TimestampUtil.toFormat(timestamp, "XX")).toBe("+0200");
|
|
106
|
+
expect(TimestampUtil.toFormat(timestamp, "XXX")).toBe("+02:00");
|
|
107
|
+
|
|
108
|
+
expect(TimestampUtil.toFormat(timestamp, "x")).toBe("+02");
|
|
109
|
+
expect(TimestampUtil.toFormat(timestamp, "xx")).toBe("+0200");
|
|
110
|
+
expect(TimestampUtil.toFormat(timestamp, "xxx")).toBe("+02:00");
|
|
111
|
+
|
|
112
|
+
expect(TimestampUtil.toFormat(timestamp, "O")).toBe("GMT+2");
|
|
113
|
+
expect(TimestampUtil.toFormat(timestamp, "OOOO")).toBe("GMT+02:00");
|
|
114
|
+
|
|
115
|
+
// expect(TimestampUtil.toFormat(timestamp, "VV")).toBe("GMT+02:00");
|
|
116
|
+
// expect(TimestampUtil.toFormat(timestamp, "V")).toBe("Europe/Amsterdam");
|
|
117
|
+
// expect(TimestampUtil.toFormat(timestamp, "Z")).toBe("+02:00");
|
|
118
|
+
// expect(TimestampUtil.toFormat(timestamp, "ZZZZ")).toBe("+02:00");
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
test("Era and Chronology", () => {
|
|
122
|
+
expect(TimestampUtil.toFormat(timestamp, "G")).toBe("AD");
|
|
123
|
+
expect(TimestampUtil.toFormat(timestamp, "GGGG")).toBe("Anno Domini");
|
|
124
|
+
expect(TimestampUtil.toFormat(timestamp, "GGGGG")).toBe("A");
|
|
125
|
+
|
|
126
|
+
expect(TimestampUtil.toFormat(timestamp, "u")).toBe("2023");
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
test("Converted", () => {
|
|
130
|
+
const ZZZ = TimestampUtil.convertFormat("ZZZ");
|
|
131
|
+
expect(TimestampUtil.toFormat(timestamp, ZZZ)).toBe("+02:00");
|
|
132
|
+
|
|
133
|
+
const ZZ = TimestampUtil.convertFormat("ZZ");
|
|
134
|
+
expect(TimestampUtil.toFormat(timestamp, ZZ)).toBe("+0200");
|
|
135
|
+
|
|
136
|
+
const Z = TimestampUtil.convertFormat("Z");
|
|
137
|
+
expect(TimestampUtil.toFormat(timestamp, Z)).toBe("+02");
|
|
138
|
+
|
|
139
|
+
const fullDateTime = TimestampUtil.convertFormat(
|
|
140
|
+
"EEE MMM dd, yyyy h:mma ZZ",
|
|
141
|
+
);
|
|
142
|
+
expect(TimestampUtil.toFormat(timestamp, fullDateTime)).toBe(
|
|
143
|
+
"Wed Jun 07, 2023 7:04AM +0200",
|
|
144
|
+
);
|
|
145
|
+
});
|
|
146
|
+
});
|
package/package.json
CHANGED
|
@@ -34,6 +34,9 @@ import type { OffsetInfo } from "../../utils/datetime/DateTimeUtil";
|
|
|
34
34
|
/**
|
|
35
35
|
*/
|
|
36
36
|
class DatetimeAttributeModel extends StringAttributeModel {
|
|
37
|
+
_dateInputFormat: ?string;
|
|
38
|
+
_timeInputFormat: ?string;
|
|
39
|
+
|
|
37
40
|
/**
|
|
38
41
|
*/
|
|
39
42
|
constructor(
|
|
@@ -269,9 +272,27 @@ class DatetimeAttributeModel extends StringAttributeModel {
|
|
|
269
272
|
return "";
|
|
270
273
|
}
|
|
271
274
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
+
if (this._dateInputFormat) {
|
|
276
|
+
return this._dateInputFormat;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// remove time and offset tokens
|
|
280
|
+
const charsToRemove = "HhaKmsSzXxO:";
|
|
281
|
+
|
|
282
|
+
let inputFormat = "";
|
|
283
|
+
let isInQuotes = false;
|
|
284
|
+
for (let i = 0; i < this.format.length; i++) {
|
|
285
|
+
const char = this.format[i];
|
|
286
|
+
if (char === "'") {
|
|
287
|
+
isInQuotes = !isInQuotes;
|
|
288
|
+
}
|
|
289
|
+
if (isInQuotes || !charsToRemove.includes(char)) {
|
|
290
|
+
inputFormat += char;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
this._dateInputFormat = inputFormat.trim();
|
|
295
|
+
return this._dateInputFormat;
|
|
275
296
|
}
|
|
276
297
|
|
|
277
298
|
/**
|
|
@@ -318,6 +339,10 @@ class DatetimeAttributeModel extends StringAttributeModel {
|
|
|
318
339
|
return "";
|
|
319
340
|
}
|
|
320
341
|
|
|
342
|
+
if (this._timeInputFormat) {
|
|
343
|
+
return this._timeInputFormat;
|
|
344
|
+
}
|
|
345
|
+
|
|
321
346
|
const format = this.format;
|
|
322
347
|
|
|
323
348
|
let timeFormatParts = [];
|
|
@@ -338,9 +363,11 @@ class DatetimeAttributeModel extends StringAttributeModel {
|
|
|
338
363
|
timeFormat = `${timeFormat}.SSS`;
|
|
339
364
|
}
|
|
340
365
|
if (format.includes("a")) {
|
|
341
|
-
|
|
366
|
+
timeFormat = `${timeFormat} a`;
|
|
342
367
|
}
|
|
343
|
-
|
|
368
|
+
|
|
369
|
+
this._timeInputFormat = timeFormat;
|
|
370
|
+
return this._timeInputFormat;
|
|
344
371
|
}
|
|
345
372
|
|
|
346
373
|
/**
|
|
@@ -385,15 +412,6 @@ class DatetimeAttributeModel extends StringAttributeModel {
|
|
|
385
412
|
return DateUtil.toFormat(value, this.dateReadonlyFormat);
|
|
386
413
|
}
|
|
387
414
|
|
|
388
|
-
if (this.hasDate && this.hasTime) {
|
|
389
|
-
const dateTimeReadonlyFormat = `${this.dateReadonlyFormat} ${this.timeReadonlyFormat}`;
|
|
390
|
-
return this.formatUtil.toFormat(value, dateTimeReadonlyFormat);
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
if (this.type === "date") {
|
|
394
|
-
return this.formatUtil.toFormat(value, this.dateReadonlyFormat);
|
|
395
|
-
}
|
|
396
|
-
|
|
397
415
|
return this.formatUtil.toFormat(value, this.format);
|
|
398
416
|
}
|
|
399
417
|
|
|
@@ -153,6 +153,35 @@ describe("datetimeAttributeModel", () => {
|
|
|
153
153
|
expect(attribute.readonlyvalue).toBe("21-12-2031 17:41");
|
|
154
154
|
});
|
|
155
155
|
|
|
156
|
+
it("can handle custom format", () => {
|
|
157
|
+
const attribute = new DatetimeAttributeModel(
|
|
158
|
+
{ value: "2031-12-21T17:41:21" },
|
|
159
|
+
{
|
|
160
|
+
type: "datetime",
|
|
161
|
+
format: "dd-MM-yyyy HH:mm xxx",
|
|
162
|
+
},
|
|
163
|
+
);
|
|
164
|
+
expect(attribute.readonlyvalue).toBe("21-12-2031 17:41 +01:00");
|
|
165
|
+
|
|
166
|
+
const attribute2 = new DatetimeAttributeModel(
|
|
167
|
+
{ value: "2031-12-21T17:41:21" },
|
|
168
|
+
{
|
|
169
|
+
type: "datetime",
|
|
170
|
+
format: "dd-MM-yyyy HH:mm Z",
|
|
171
|
+
},
|
|
172
|
+
);
|
|
173
|
+
expect(attribute2.readonlyvalue).toBe("21-12-2031 17:41 +01");
|
|
174
|
+
|
|
175
|
+
const attribute3 = new DatetimeAttributeModel(
|
|
176
|
+
{ value: "2031-12-21T17:41:21" },
|
|
177
|
+
{
|
|
178
|
+
type: "datetime",
|
|
179
|
+
format: "EEE MMM dd, yyyy h:mma ZZ",
|
|
180
|
+
},
|
|
181
|
+
);
|
|
182
|
+
expect(attribute3.readonlyvalue).toBe("Sun Dec 21, 2031 5:41PM +0100");
|
|
183
|
+
});
|
|
184
|
+
|
|
156
185
|
it("returns date part of formatlabel as placeholder if attribute has date and time", () => {
|
|
157
186
|
const attribute = new DatetimeAttributeModel(
|
|
158
187
|
{},
|
|
@@ -303,4 +303,21 @@ describe("datetimeAttributeModel with offset on", () => {
|
|
|
303
303
|
value: "+02:00",
|
|
304
304
|
});
|
|
305
305
|
});
|
|
306
|
+
|
|
307
|
+
it("Date format with offset info", () => {
|
|
308
|
+
const attribute = new DatetimeAttributeModel(
|
|
309
|
+
{ key: "datetime", value: "1969-09-23T12:34:00+00:00" },
|
|
310
|
+
{
|
|
311
|
+
type: "datetime",
|
|
312
|
+
label: "Start date and time at company",
|
|
313
|
+
mandatory: false,
|
|
314
|
+
formatlabel: "dd-mm-yyyy hh:mm",
|
|
315
|
+
assistant: "The date and time of the first working day",
|
|
316
|
+
format: "dd-MM-yyyy HH:mm X",
|
|
317
|
+
},
|
|
318
|
+
);
|
|
319
|
+
|
|
320
|
+
expect(attribute.format).toBe("dd-MM-yyyy HH:mm X");
|
|
321
|
+
expect(attribute.errorCollection.isEmpty).toBe(true);
|
|
322
|
+
});
|
|
306
323
|
});
|
|
@@ -99,8 +99,32 @@ class BaseDateTimeUtil {
|
|
|
99
99
|
|
|
100
100
|
/**
|
|
101
101
|
*/
|
|
102
|
-
convertFormat(
|
|
103
|
-
|
|
102
|
+
convertFormat(javaFormat: string): string {
|
|
103
|
+
if (!javaFormat) {
|
|
104
|
+
return this.getIsoFormat();
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const javaToUTS35Map = {
|
|
108
|
+
ZZZ: "xxx",
|
|
109
|
+
ZZ: "xx",
|
|
110
|
+
Z: "x",
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
// Replace Java pattern tokens with UTS #35 tokens
|
|
114
|
+
let uts35Format = javaFormat;
|
|
115
|
+
|
|
116
|
+
// Sort keys by length (descending) to handle multi-character tokens first
|
|
117
|
+
const sortedKeys = Object.keys(javaToUTS35Map).sort(
|
|
118
|
+
(a, b) => b.length - a.length,
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
for (const javaToken of sortedKeys) {
|
|
122
|
+
const uts35Token = javaToUTS35Map[javaToken];
|
|
123
|
+
const regex = new RegExp(javaToken, "g"); // Match all occurrences
|
|
124
|
+
uts35Format = uts35Format.replace(regex, uts35Token);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return uts35Format;
|
|
104
128
|
}
|
|
105
129
|
|
|
106
130
|
/**
|
|
@@ -613,6 +613,13 @@ describe("asserts for date/time utilities", () => {
|
|
|
613
613
|
expect(TimestampUtil.convertFormat("yyyy-MM-dd HH:mm:ss.SSS")).toBe(
|
|
614
614
|
"yyyy-MM-dd HH:mm:ss.SSS",
|
|
615
615
|
);
|
|
616
|
+
expect(TimestampUtil.convertFormat("dd-MM-yyyy HH:mm Z")).toBe(
|
|
617
|
+
"dd-MM-yyyy HH:mm x",
|
|
618
|
+
);
|
|
619
|
+
|
|
620
|
+
expect(TimestampUtil.convertFormat("dd-MM-yyyy HH:mm zzzz")).toBe(
|
|
621
|
+
"dd-MM-yyyy HH:mm zzzz",
|
|
622
|
+
);
|
|
616
623
|
});
|
|
617
624
|
|
|
618
625
|
it("should render iso timestamp to specified format", () => {
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { TimestampUtil } from "../DateTimeUtil";
|
|
2
|
+
import { INCLUDE_TIME_OFFSET, setSettings } from "../../../constants";
|
|
3
|
+
|
|
4
|
+
const timestamp = "2023-06-07T07:04:01.010+02:00";
|
|
5
|
+
|
|
6
|
+
describe("date time format conversion", () => {
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
TimestampUtil.setTimeZone("Europe/Amsterdam");
|
|
9
|
+
setSettings({ [INCLUDE_TIME_OFFSET]: true });
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
test("Year", () => {
|
|
13
|
+
expect(TimestampUtil.toFormat(timestamp, "yy")).toBe("23");
|
|
14
|
+
expect(TimestampUtil.toFormat(timestamp, "yyyy")).toBe("2023");
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test("Month", () => {
|
|
18
|
+
expect(TimestampUtil.toFormat(timestamp, "M")).toBe("6");
|
|
19
|
+
expect(TimestampUtil.toFormat(timestamp, "MM")).toBe("06");
|
|
20
|
+
expect(TimestampUtil.toFormat(timestamp, "MMM")).toBe("Jun");
|
|
21
|
+
expect(TimestampUtil.toFormat(timestamp, "MMMM")).toBe("June");
|
|
22
|
+
expect(TimestampUtil.toFormat(timestamp, "MMMMM")).toBe("J");
|
|
23
|
+
|
|
24
|
+
expect(TimestampUtil.toFormat(timestamp, "L")).toBe("6");
|
|
25
|
+
expect(TimestampUtil.toFormat(timestamp, "LL")).toBe("06");
|
|
26
|
+
expect(TimestampUtil.toFormat(timestamp, "LLL")).toBe("Jun");
|
|
27
|
+
expect(TimestampUtil.toFormat(timestamp, "LLLL")).toBe("June");
|
|
28
|
+
expect(TimestampUtil.toFormat(timestamp, "LLLLL")).toBe("J");
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test("Day", () => {
|
|
32
|
+
expect(TimestampUtil.toFormat(timestamp, "d")).toBe("7");
|
|
33
|
+
expect(TimestampUtil.toFormat(timestamp, "dd")).toBe("07");
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test("Quarter", () => {
|
|
37
|
+
expect(TimestampUtil.toFormat(timestamp, "Q")).toBe("2");
|
|
38
|
+
expect(TimestampUtil.toFormat(timestamp, "QQ")).toBe("02");
|
|
39
|
+
expect(TimestampUtil.toFormat(timestamp, "QQQ")).toBe("Q2");
|
|
40
|
+
expect(TimestampUtil.toFormat(timestamp, "QQQQ")).toBe("2nd quarter");
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test.skip("Day of Year", () => {
|
|
44
|
+
expect(TimestampUtil.toFormat(timestamp, "D")).toBe("7");
|
|
45
|
+
expect(TimestampUtil.toFormat(timestamp, "DD")).toBe("07");
|
|
46
|
+
expect(TimestampUtil.toFormat(timestamp, "DDD")).toBe("07");
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
test("Day of Week", () => {
|
|
50
|
+
expect(TimestampUtil.toFormat(timestamp, "E")).toBe("Wed");
|
|
51
|
+
expect(TimestampUtil.toFormat(timestamp, "EEEE")).toBe("Wednesday");
|
|
52
|
+
expect(TimestampUtil.toFormat(timestamp, "EEEEE")).toBe("W");
|
|
53
|
+
|
|
54
|
+
expect(TimestampUtil.toFormat(timestamp, "e")).toBe("3");
|
|
55
|
+
expect(TimestampUtil.toFormat(timestamp, "ee")).toBe("03");
|
|
56
|
+
expect(TimestampUtil.toFormat(timestamp, "eee")).toBe("Wed");
|
|
57
|
+
expect(TimestampUtil.toFormat(timestamp, "eeee")).toBe("Wednesday");
|
|
58
|
+
expect(TimestampUtil.toFormat(timestamp, "eeeee")).toBe("W");
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
test("Week", () => {
|
|
62
|
+
expect(TimestampUtil.toFormat(timestamp, "w")).toBe("23");
|
|
63
|
+
// expect(TimestampUtil.toFormat(timestamp, "W")).toBe("23");
|
|
64
|
+
// expect(TimestampUtil.toFormat(timestamp, "F")).toBe("W");
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
test("Hour", () => {
|
|
68
|
+
expect(TimestampUtil.toFormat(timestamp, "H")).toBe("7");
|
|
69
|
+
expect(TimestampUtil.toFormat(timestamp, "HH")).toBe("07");
|
|
70
|
+
expect(TimestampUtil.toFormat(timestamp, "h")).toBe("7");
|
|
71
|
+
expect(TimestampUtil.toFormat(timestamp, "hh")).toBe("07");
|
|
72
|
+
|
|
73
|
+
expect(TimestampUtil.toFormat(timestamp, "a")).toBe("AM");
|
|
74
|
+
expect(TimestampUtil.toFormat(timestamp, "aa")).toBe("AM");
|
|
75
|
+
expect(TimestampUtil.toFormat(timestamp, "aaa")).toBe("am");
|
|
76
|
+
expect(TimestampUtil.toFormat(timestamp, "aaaa")).toBe("a.m.");
|
|
77
|
+
expect(TimestampUtil.toFormat(timestamp, "aaaaa")).toBe("a");
|
|
78
|
+
|
|
79
|
+
expect(TimestampUtil.toFormat(timestamp, "K")).toBe("7");
|
|
80
|
+
expect(TimestampUtil.toFormat(timestamp, "k")).toBe("7");
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
test("Minute", () => {
|
|
84
|
+
expect(TimestampUtil.toFormat(timestamp, "m")).toBe("4");
|
|
85
|
+
expect(TimestampUtil.toFormat(timestamp, "mm")).toBe("04");
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
test("Seconds", () => {
|
|
89
|
+
expect(TimestampUtil.toFormat(timestamp, "s")).toBe("1");
|
|
90
|
+
expect(TimestampUtil.toFormat(timestamp, "ss")).toBe("01");
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
test("Milliseconds", () => {
|
|
94
|
+
expect(TimestampUtil.toFormat(timestamp, "SSS")).toBe("010");
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
test("Zone / offset", () => {
|
|
98
|
+
expect(TimestampUtil.toFormat(timestamp, "z")).toBe("GMT+2");
|
|
99
|
+
expect(TimestampUtil.toFormat(timestamp, "zz")).toBe("GMT+2");
|
|
100
|
+
expect(TimestampUtil.toFormat(timestamp, "zzz")).toBe("GMT+2");
|
|
101
|
+
expect(TimestampUtil.toFormat(timestamp, "zzzz")).toBe("GMT+02:00");
|
|
102
|
+
expect(TimestampUtil.toFormat(timestamp, "zzzzz")).toBe("GMT+02:00");
|
|
103
|
+
|
|
104
|
+
expect(TimestampUtil.toFormat(timestamp, "X")).toBe("+02");
|
|
105
|
+
expect(TimestampUtil.toFormat(timestamp, "XX")).toBe("+0200");
|
|
106
|
+
expect(TimestampUtil.toFormat(timestamp, "XXX")).toBe("+02:00");
|
|
107
|
+
|
|
108
|
+
expect(TimestampUtil.toFormat(timestamp, "x")).toBe("+02");
|
|
109
|
+
expect(TimestampUtil.toFormat(timestamp, "xx")).toBe("+0200");
|
|
110
|
+
expect(TimestampUtil.toFormat(timestamp, "xxx")).toBe("+02:00");
|
|
111
|
+
|
|
112
|
+
expect(TimestampUtil.toFormat(timestamp, "O")).toBe("GMT+2");
|
|
113
|
+
expect(TimestampUtil.toFormat(timestamp, "OOOO")).toBe("GMT+02:00");
|
|
114
|
+
|
|
115
|
+
// expect(TimestampUtil.toFormat(timestamp, "VV")).toBe("GMT+02:00");
|
|
116
|
+
// expect(TimestampUtil.toFormat(timestamp, "V")).toBe("Europe/Amsterdam");
|
|
117
|
+
// expect(TimestampUtil.toFormat(timestamp, "Z")).toBe("+02:00");
|
|
118
|
+
// expect(TimestampUtil.toFormat(timestamp, "ZZZZ")).toBe("+02:00");
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
test("Era and Chronology", () => {
|
|
122
|
+
expect(TimestampUtil.toFormat(timestamp, "G")).toBe("AD");
|
|
123
|
+
expect(TimestampUtil.toFormat(timestamp, "GGGG")).toBe("Anno Domini");
|
|
124
|
+
expect(TimestampUtil.toFormat(timestamp, "GGGGG")).toBe("A");
|
|
125
|
+
|
|
126
|
+
expect(TimestampUtil.toFormat(timestamp, "u")).toBe("2023");
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
test("Converted", () => {
|
|
130
|
+
const ZZZ = TimestampUtil.convertFormat("ZZZ");
|
|
131
|
+
expect(TimestampUtil.toFormat(timestamp, ZZZ)).toBe("+02:00");
|
|
132
|
+
|
|
133
|
+
const ZZ = TimestampUtil.convertFormat("ZZ");
|
|
134
|
+
expect(TimestampUtil.toFormat(timestamp, ZZ)).toBe("+0200");
|
|
135
|
+
|
|
136
|
+
const Z = TimestampUtil.convertFormat("Z");
|
|
137
|
+
expect(TimestampUtil.toFormat(timestamp, Z)).toBe("+02");
|
|
138
|
+
|
|
139
|
+
const fullDateTime = TimestampUtil.convertFormat(
|
|
140
|
+
"EEE MMM dd, yyyy h:mma ZZ",
|
|
141
|
+
);
|
|
142
|
+
expect(TimestampUtil.toFormat(timestamp, fullDateTime)).toBe(
|
|
143
|
+
"Wed Jun 07, 2023 7:04AM +0200",
|
|
144
|
+
);
|
|
145
|
+
});
|
|
146
|
+
});
|