Skip to content
This repository was archived by the owner on May 29, 2019. It is now read-only.

Commit b1cfc57

Browse files
committed
feat(dateparser): add M! and d! support
- Add M! and d! for optional support of leading zeroes in date string format Closes #4805 Closes #4809
1 parent 3f5b420 commit b1cfc57

File tree

3 files changed

+47
-1
lines changed

3 files changed

+47
-1
lines changed

src/dateparser/dateparser.js

+8
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ angular.module('ui.bootstrap.dateparser', [])
2525
regex: '\\d{1,4}',
2626
apply: function(value) { this.year = +value; }
2727
},
28+
'M!': {
29+
regex: '0?[1-9]|1[0-2]',
30+
apply: function(value) { this.month = value - 1; }
31+
},
2832
'MMMM': {
2933
regex: $locale.DATETIME_FORMATS.MONTH.join('|'),
3034
apply: function(value) { this.month = $locale.DATETIME_FORMATS.MONTH.indexOf(value); }
@@ -41,6 +45,10 @@ angular.module('ui.bootstrap.dateparser', [])
4145
regex: '[1-9]|1[0-2]',
4246
apply: function(value) { this.month = value - 1; }
4347
},
48+
'd!': {
49+
regex: '[0-2]?[0-9]{1}|3[0-1]{1}',
50+
apply: function(value) { this.date = +value; }
51+
},
4452
'dd': {
4553
regex: '[0-2][0-9]{1}|3[0-1]{1}',
4654
apply: function(value) { this.date = +value; }

src/dateparser/docs/README.md

+9-1
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,22 @@ Certain format codes support i18n. Check this [guide](https://docs.angularjs.org
5353
* `M`
5454
_(Example: `3`)_ -
5555
Parses a numeric month.
56-
56+
57+
* `M!`
58+
_(Example: `3` or `03`)_ -
59+
Parses a numeric month, but allowing an optional leading zero
60+
5761
* `dd`
5862
_(Example: `05`, Leading 0)_ -
5963
Parses a numeric day.
6064

6165
* `d`
6266
_(Example: `5`)_ -
6367
Parses a numeric day.
68+
69+
* `d!`
70+
_(Example: `3` or `03`)_ -
71+
Parses a numeric day, but allowing an optional leading zero
6472

6573
* `EEEE`
6674
_(Example: `Sunday`, i18n support)_ -

src/dateparser/test/dateparser.spec.js

+30
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,22 @@ describe('date parser', function() {
6666
expectParse('02-5-11', 'dd-M-yy', new Date(2011, 4, 2, 0));
6767
});
6868

69+
it('should work correctly for `M!`', function() {
70+
expectParse('8/11/2013', 'M!/dd/yyyy', new Date(2013, 7, 11, 0));
71+
expectParse('07.11.05', 'dd.M!.yy', new Date(2005, 10, 7, 0));
72+
expectParse('02-5-11', 'dd-M!-yy', new Date(2011, 4, 2, 0));
73+
expectParse('2/05/1980', 'M!/dd/yyyy', new Date(1980, 1, 5, 0));
74+
expectParse('1955/2/05', 'yyyy/M!/dd', new Date(1955, 1, 5, 0));
75+
expectParse('02-5-11', 'dd-M!-yy', new Date(2011, 4, 2, 0));
76+
77+
expectParse('08/11/2013', 'M!/dd/yyyy', new Date(2013, 7, 11, 0));
78+
expectParse('07.11.05', 'dd.M!.yy', new Date(2005, 10, 7, 0));
79+
expectParse('02-05-11', 'dd-M!-yy', new Date(2011, 4, 2, 0));
80+
expectParse('02/05/1980', 'M!/dd/yyyy', new Date(1980, 1, 5, 0));
81+
expectParse('1955/02/05', 'yyyy/M!/dd', new Date(1955, 1, 5, 0));
82+
expectParse('02-05-11', 'dd-M!-yy', new Date(2011, 4, 2, 0));
83+
});
84+
6985
it('should work correctly for `d`', function() {
7086
expectParse('17.November.13', 'd.MMMM.yy', new Date(2013, 10, 17, 0));
7187
expectParse('8-March-1991', 'd-MMMM-yyyy', new Date(1991, 2, 8, 0));
@@ -74,6 +90,20 @@ describe('date parser', function() {
7490
expectParse('11-08-13', 'd-MM-yy', new Date(2013, 7, 11, 0));
7591
});
7692

93+
it('should work correctly for `d!`', function() {
94+
expectParse('17.November.13', 'd!.MMMM.yy', new Date(2013, 10, 17, 0));
95+
expectParse('8-March-1991', 'd!-MMMM-yyyy', new Date(1991, 2, 8, 0));
96+
expectParse('February/5/1980', 'MMMM/d!/yyyy', new Date(1980, 1, 5, 0));
97+
expectParse('1955/February/5', 'yyyy/MMMM/d!', new Date(1955, 1, 5, 0));
98+
expectParse('11-08-13', 'd!-MM-yy', new Date(2013, 7, 11, 0));
99+
100+
expectParse('17.November.13', 'd!.MMMM.yy', new Date(2013, 10, 17, 0));
101+
expectParse('08-March-1991', 'd!-MMMM-yyyy', new Date(1991, 2, 8, 0));
102+
expectParse('February/05/1980', 'MMMM/d!/yyyy', new Date(1980, 1, 5, 0));
103+
expectParse('1955/February/05', 'yyyy/MMMM/d!', new Date(1955, 1, 5, 0));
104+
expectParse('11-08-13', 'd!-MM-yy', new Date(2013, 7, 11, 0));
105+
});
106+
77107
it('should work correctly for `EEEE`', function() {
78108
expectParse('Sunday.17.November.13', 'EEEE.d.MMMM.yy', new Date(2013, 10, 17, 0));
79109
expectParse('8-Friday-March-1991', 'd-EEEE-MMMM-yyyy', new Date(1991, 2, 8, 0));

0 commit comments

Comments
 (0)