|
2 | 2 | getIsoDatePatterns, |
3 | 3 | getIsoTimePatterns, |
4 | 4 | isDateString, |
| 5 | + parseIsoDateString, |
5 | 6 | } from '../../../../../src/data/utils/isType/isDateString'; |
6 | 7 |
|
7 | 8 | describe('func: isDateString', () => { |
@@ -38,21 +39,50 @@ describe('func: isDateString', () => { |
38 | 39 | }); |
39 | 40 | }); |
40 | 41 |
|
| 42 | +describe('func: parseIsoDateString', () => { |
| 43 | + test('parse a date string to date type', () => { |
| 44 | + expect(parseIsoDateString('1991')).toStrictEqual(new Date('1991-01-01 00:00:00.000')); |
| 45 | + expect(parseIsoDateString('2010 W08 1')).toStrictEqual(new Date('2010-02-15 00:00:00.000')); |
| 46 | + expect(parseIsoDateString('2010-W08')).toStrictEqual(new Date('2010-02-15 00:00:00.000')); |
| 47 | + expect(parseIsoDateString('2010-08-01')).toStrictEqual(new Date('2010-08-01 00:00:00.000')); |
| 48 | + expect(parseIsoDateString('20100801')).toStrictEqual(new Date('2010-08-01 00:00:00.000')); |
| 49 | + expect(parseIsoDateString('2010/08/01')).toStrictEqual(new Date('2010-08-01 00:00:00.000')); |
| 50 | + expect(parseIsoDateString('12/08/1999')).toStrictEqual(new Date('1999-12-08 00:00:00.000')); |
| 51 | + expect(parseIsoDateString('1/1/1999')).toStrictEqual(new Date('1999-01-01 00:00:00.000')); |
| 52 | + expect(parseIsoDateString('1999-01')).toStrictEqual(new Date('1999-01 00:00:00.000')); |
| 53 | + expect(parseIsoDateString('1999-200')).toStrictEqual(new Date(1999, 0, 200)); |
| 54 | + expect(parseIsoDateString('1999-367')).toBe(null); |
| 55 | + expect(parseIsoDateString('2010-08-01 20:00:00')).toStrictEqual(new Date('2010-08-01 20:00:00.000')); |
| 56 | + expect(parseIsoDateString('20:00:00')).toStrictEqual(new Date('01-01 20:00:00')); |
| 57 | + expect(parseIsoDateString('20:00:00Z')).toStrictEqual(new Date('01-01 20:00:00Z')); |
| 58 | + expect(parseIsoDateString('20:00:00+08:00')).toStrictEqual(new Date('01-01 20:00:00+08:00')); |
| 59 | + expect(parseIsoDateString('20:00:00-08:00')).toStrictEqual(new Date('01-01 20:00:00-08:00')); |
| 60 | + expect(parseIsoDateString('20:00:00.299-08:00')).toStrictEqual(new Date('01-01 20:00:00.299-08:00')); |
| 61 | + expect(parseIsoDateString('20:00:00.299')).toStrictEqual(new Date('01-01 20:00:00.299')); |
| 62 | + }); |
| 63 | + |
| 64 | + test('strictly recognize number as date', () => { |
| 65 | + expect(isDateString('997815')).toBe(false); |
| 66 | + expect(isDateString('1135028')).toBe(false); |
| 67 | + expect(isDateString('5388715')).toBe(false); |
| 68 | + }); |
| 69 | +}); |
| 70 | + |
41 | 71 | describe('Not strict', () => { |
42 | 72 | const isoDatePatternsNotStrict = getIsoDatePatterns(false); |
43 | 73 | const isoTimePatternsNotStrict = getIsoTimePatterns(false); |
44 | 74 |
|
45 | 75 | expect(isoDatePatternsNotStrict).toStrictEqual([ |
46 | | - '(18|19|20)\\d{2}', |
47 | | - '(18|19|20)\\d{2}([-_./\\s])?W([0-4]\\d|5[0-2])(([-_./\\s])?([1-7]))?', |
48 | | - '(0?[1-9]|1[012])([-_./\\s])?(0?[1-9]|[12]\\d|3[01])([-_./\\s])?(18|19|20)\\d{2}', |
49 | | - '(18|19|20)\\d{2}([-_./\\s])?(0?[1-9]|1[012])([-_./\\s])?(0?[1-9]|[12]\\d|3[01])', |
50 | | - '(18|19|20)\\d{2}([-_./\\s])?(0?[1-9]|1[012])', |
51 | | - '(18|19|20)\\d{2}([-_./\\s])?((([0-2]\\d|3[0-5])\\d)|36[0-6])', |
| 76 | + '(?<year>(18|19|20)\\d{2})', |
| 77 | + '(?<year>(18|19|20)\\d{2})([-_./\\s])?W(?<week>[0-4]\\d|5[0-2])(([-_./\\s])?(?<weekday>[1-7]))?', |
| 78 | + '(?<month>0?[1-9]|1[012])([-_./\\s])?(?<day>0?[1-9]|[12]\\d|3[01])([-_./\\s])?(?<year>(18|19|20)\\d{2})', |
| 79 | + '(?<year>(18|19|20)\\d{2})([-_./\\s])?(?<month>0?[1-9]|1[012])([-_./\\s])?(?<day>0?[1-9]|[12]\\d|3[01])', |
| 80 | + '(?<year>(18|19|20)\\d{2})([-_./\\s])?(?<month>0?[1-9]|1[012])', |
| 81 | + '(?<year>(18|19|20)\\d{2})([-_./\\s])?(?<yearDay>(([0-2]\\d|3[0-5])\\d)|36[0-6])', |
52 | 82 | ]); |
53 | 83 |
|
54 | 84 | expect(isoTimePatternsNotStrict).toStrictEqual([ |
55 | | - '(0?\\d|1\\d|2[0-4]):?(0?\\d|[012345]\\d):?(0?\\d|[012345]\\d)([.,]\\d{1,4})?(Z|[+-](0?\\d|1\\d|2[0-4])(:(0?\\d|[012345]\\d))?)?', |
56 | | - '(0?\\d|1\\d|2[0-4]):?(0?\\d|[012345]\\d)?(Z|[+-](0?\\d|1\\d|2[0-4])(:(0?\\d|[012345]\\d))?)', |
| 85 | + '(?<hour>(0?\\d|[012345]\\d)):?(?<minute>(0?\\d|[012345]\\d)):?(?<second>(0?\\d|[012345]\\d))([.,](?<millisecond>\\d{1,4}))?(?<offset>Z|[+-](0?\\d|1\\d|2[0-4])(:(0?\\d|[012345]\\d))?)?', |
| 86 | + '(?<hour>(0?\\d|[012345]\\d)):?(?<minute>(0?\\d|[012345]\\d))?(?<offset>Z|[+-](0?\\d|1\\d|2[0-4])(:(0?\\d|[012345]\\d))?)', |
57 | 87 | ]); |
58 | 88 | }); |
0 commit comments