@@ -9,7 +9,7 @@ const reduceToDictionary = (parts: DatePartInfo[]) => parts.reduce((obj, x) => {
9
9
describe ( `DateTimeUtil Unit tests` , ( ) => {
10
10
describe ( 'Date Time Parsing' , ( ) => {
11
11
it ( 'should correctly parse all date time parts (base)' , ( ) => {
12
- const result = DateTimeUtil . parseDateTimeFormat ( 'dd/MM/yyyy HH:mm:ss a' ) ;
12
+ const result = DateTimeUtil . parseDateTimeFormat ( 'dd/MM/yyyy HH:mm:ss:SS a' ) ;
13
13
const expected = [
14
14
{ start : 0 , end : 2 , type : DatePart . Date , format : 'dd' } ,
15
15
{ start : 2 , end : 3 , type : DatePart . Literal , format : '/' } ,
@@ -22,8 +22,10 @@ describe(`DateTimeUtil Unit tests`, () => {
22
22
{ start : 14 , end : 16 , type : DatePart . Minutes , format : 'mm' } ,
23
23
{ start : 16 , end : 17 , type : DatePart . Literal , format : ':' } ,
24
24
{ start : 17 , end : 19 , type : DatePart . Seconds , format : 'ss' } ,
25
- { start : 19 , end : 20 , type : DatePart . Literal , format : ' ' } ,
26
- { start : 20 , end : 22 , type : DatePart . AmPm , format : 'aa' }
25
+ { start : 19 , end : 20 , type : DatePart . Literal , format : ':' } ,
26
+ { start : 20 , end : 23 , type : DatePart . FractionalSeconds , format : 'SSS' } ,
27
+ { start : 23 , end : 24 , type : DatePart . Literal , format : ' ' } ,
28
+ { start : 24 , end : 26 , type : DatePart . AmPm , format : 'aa' }
27
29
] ;
28
30
expect ( JSON . stringify ( result ) ) . toEqual ( JSON . stringify ( expected ) ) ;
29
31
} ) ;
@@ -235,6 +237,7 @@ describe(`DateTimeUtil Unit tests`, () => {
235
237
expect ( DateTimeUtil . isDateOrTimeChar ( 'h' ) ) . toBeTrue ( ) ;
236
238
expect ( DateTimeUtil . isDateOrTimeChar ( 'm' ) ) . toBeTrue ( ) ;
237
239
expect ( DateTimeUtil . isDateOrTimeChar ( 's' ) ) . toBeTrue ( ) ;
240
+ expect ( DateTimeUtil . isDateOrTimeChar ( 'S' ) ) . toBeTrue ( ) ;
238
241
expect ( DateTimeUtil . isDateOrTimeChar ( ':' ) ) . toBeFalse ( ) ;
239
242
expect ( DateTimeUtil . isDateOrTimeChar ( '/' ) ) . toBeFalse ( ) ;
240
243
expect ( DateTimeUtil . isDateOrTimeChar ( '.' ) ) . toBeFalse ( ) ;
@@ -414,6 +417,34 @@ describe(`DateTimeUtil Unit tests`, () => {
414
417
expect ( date . getTime ( ) ) . toEqual ( new Date ( 2015 , 4 , 20 , 12 , 59 , 57 ) . getTime ( ) ) ;
415
418
} ) ;
416
419
420
+ it ( 'should spin fractional seconds portion correctly' , ( ) => {
421
+ // base
422
+ let date = new Date ( 2024 , 3 , 10 , 6 , 10 , 5 , 555 ) ;
423
+ DateTimeUtil . spinFractionalSeconds ( 1 , date , false ) ;
424
+ expect ( date . getTime ( ) ) . toEqual ( new Date ( 2024 , 3 , 10 , 6 , 10 , 5 , 556 ) . getTime ( ) ) ;
425
+ DateTimeUtil . spinFractionalSeconds ( - 1 , date , false ) ;
426
+ expect ( date . getTime ( ) ) . toEqual ( new Date ( 2024 , 3 , 10 , 6 , 10 , 5 , 555 ) . getTime ( ) ) ;
427
+
428
+ // delta !== 1
429
+ DateTimeUtil . spinFractionalSeconds ( 5 , date , false ) ;
430
+ expect ( date . getTime ( ) ) . toEqual ( new Date ( 2024 , 3 , 10 , 6 , 10 , 5 , 560 ) . getTime ( ) ) ;
431
+ DateTimeUtil . spinFractionalSeconds ( - 6 , date , false ) ;
432
+ expect ( date . getTime ( ) ) . toEqual ( new Date ( 2024 , 3 , 10 , 6 , 10 , 5 , 554 ) . getTime ( ) ) ;
433
+
434
+ // without looping over
435
+ date = new Date ( 2024 , 3 , 10 , 6 , 10 , 5 , 999 ) ;
436
+ DateTimeUtil . spinFractionalSeconds ( 1 , date , false ) ;
437
+ expect ( date . getTime ( ) ) . toEqual ( new Date ( 2024 , 3 , 10 , 6 , 10 , 5 , 999 ) . getTime ( ) ) ;
438
+ DateTimeUtil . spinFractionalSeconds ( - 1000 , date , false ) ;
439
+ expect ( date . getTime ( ) ) . toEqual ( new Date ( 2024 , 3 , 10 , 6 , 10 , 5 , 0 ) . getTime ( ) ) ;
440
+
441
+ // with looping over (seconds are not affected)
442
+ DateTimeUtil . spinFractionalSeconds ( 1001 , date , true ) ;
443
+ expect ( date . getTime ( ) ) . toEqual ( new Date ( 2024 , 3 , 10 , 6 , 10 , 5 , 1 ) . getTime ( ) ) ;
444
+ DateTimeUtil . spinFractionalSeconds ( - 5 , date , true ) ;
445
+ expect ( date . getTime ( ) ) . toEqual ( new Date ( 2024 , 3 , 10 , 6 , 10 , 5 , 996 ) . getTime ( ) ) ;
446
+ } ) ;
447
+
417
448
it ( 'should spin AM/PM and a/p portion correctly' , ( ) => {
418
449
const currentDate = new Date ( 2015 , 4 , 31 , 4 , 59 , 59 ) ;
419
450
const newDate = new Date ( 2015 , 4 , 31 , 4 , 59 , 59 ) ;
0 commit comments