Skip to content

Commit

Permalink
fixed dateFormat method for special characters
Browse files Browse the repository at this point in the history
  • Loading branch information
t1m0n committed Feb 13, 2016
1 parent fbb3557 commit d9aea00
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 26 deletions.
29 changes: 17 additions & 12 deletions dist/js/datepicker.js
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,7 @@ var Datepicker;
formatDate: function (string, date) {
date = date || this.date;
var result = string,
boundary = this._getWordBoundaryRegExp,
locale = this.loc,
decade = datepicker.getDecade(date),
d = datepicker.getParsedDate(date);
Expand All @@ -310,34 +311,38 @@ var Datepicker;
case /@/.test(result):
result = result.replace(/@/, date.getTime());
case /dd/.test(result):
result = result.replace(/\bdd\b/, d.fullDate);
result = result.replace(boundary('dd'), d.fullDate);
case /d/.test(result):
result = result.replace(/\bd\b/, d.date);
result = result.replace(boundary('d'), d.date);
case /DD/.test(result):
result = result.replace(/\bDD\b/, locale.days[d.day]);
result = result.replace(boundary('DD'), locale.days[d.day]);
case /D/.test(result):
result = result.replace(/\bD\b/, locale.daysShort[d.day]);
result = result.replace(boundary('D'), locale.daysShort[d.day]);
case /mm/.test(result):
result = result.replace(/\bmm\b/, d.fullMonth);
result = result.replace(boundary('mm'), d.fullMonth);
case /m/.test(result):
result = result.replace(/\bm\b/, d.month + 1);
result = result.replace(boundary('m'), d.month + 1);
case /MM/.test(result):
result = result.replace(/\bMM\b/, this.loc.months[d.month]);
result = result.replace(boundary('MM'), this.loc.months[d.month]);
case /M/.test(result):
result = result.replace(/\bM\b/, locale.monthsShort[d.month]);
result = result.replace(boundary('M'), locale.monthsShort[d.month]);
case /yyyy/.test(result):
result = result.replace(/\byyyy\b/, d.year);
result = result.replace(boundary('yyyy'), d.year);
case /yyyy1/.test(result):
result = result.replace(/\byyyy1\b/, decade[0]);
result = result.replace(boundary('yyyy1'), decade[0]);
case /yyyy2/.test(result):
result = result.replace(/\byyyy2\b/, decade[1]);
result = result.replace(boundary('yyyy2'), decade[1]);
case /yy/.test(result):
result = result.replace(/\byy\b/, d.year.toString().slice(-2));
result = result.replace(boundary('yy'), d.year.toString().slice(-2));
}

return result;
},

_getWordBoundaryRegExp: function (sign) {
return new RegExp('\\b(?=[a-zA-Z0-9äöüßÄÖÜ<])' + sign + '(?![>a-zA-Z0-9äöüßÄÖÜ])');
},

selectDate: function (date) {
var _this = this,
opts = _this.opts,
Expand Down
2 changes: 1 addition & 1 deletion dist/js/datepicker.min.js

Large diffs are not rendered by default.

29 changes: 17 additions & 12 deletions src/js/datepicker.js
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,7 @@ var Datepicker;
formatDate: function (string, date) {
date = date || this.date;
var result = string,
boundary = this._getWordBoundaryRegExp,
locale = this.loc,
decade = datepicker.getDecade(date),
d = datepicker.getParsedDate(date);
Expand All @@ -310,34 +311,38 @@ var Datepicker;
case /@/.test(result):
result = result.replace(/@/, date.getTime());
case /dd/.test(result):
result = result.replace(/\bdd\b/, d.fullDate);
result = result.replace(boundary('dd'), d.fullDate);
case /d/.test(result):
result = result.replace(/\bd\b/, d.date);
result = result.replace(boundary('d'), d.date);
case /DD/.test(result):
result = result.replace(/\bDD\b/, locale.days[d.day]);
result = result.replace(boundary('DD'), locale.days[d.day]);
case /D/.test(result):
result = result.replace(/\bD\b/, locale.daysShort[d.day]);
result = result.replace(boundary('D'), locale.daysShort[d.day]);
case /mm/.test(result):
result = result.replace(/\bmm\b/, d.fullMonth);
result = result.replace(boundary('mm'), d.fullMonth);
case /m/.test(result):
result = result.replace(/\bm\b/, d.month + 1);
result = result.replace(boundary('m'), d.month + 1);
case /MM/.test(result):
result = result.replace(/\bMM\b/, this.loc.months[d.month]);
result = result.replace(boundary('MM'), this.loc.months[d.month]);
case /M/.test(result):
result = result.replace(/\bM\b/, locale.monthsShort[d.month]);
result = result.replace(boundary('M'), locale.monthsShort[d.month]);
case /yyyy/.test(result):
result = result.replace(/\byyyy\b/, d.year);
result = result.replace(boundary('yyyy'), d.year);
case /yyyy1/.test(result):
result = result.replace(/\byyyy1\b/, decade[0]);
result = result.replace(boundary('yyyy1'), decade[0]);
case /yyyy2/.test(result):
result = result.replace(/\byyyy2\b/, decade[1]);
result = result.replace(boundary('yyyy2'), decade[1]);
case /yy/.test(result):
result = result.replace(/\byy\b/, d.year.toString().slice(-2));
result = result.replace(boundary('yy'), d.year.toString().slice(-2));
}

return result;
},

_getWordBoundaryRegExp: function (sign) {
return new RegExp('\\b(?=[a-zA-Z0-9äöüßÄÖÜ<])' + sign + '(?![>a-zA-Z0-9äöüßÄÖÜ])');
},

selectDate: function (date) {
var _this = this,
opts = _this.opts,
Expand Down
1 change: 1 addition & 0 deletions tests/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
<script type="text/javascript" src="../bower_components/jquery/dist/jquery.min.js"></script>
<script type="text/javascript" src="../dist/js/datepicker.js"></script>
<script type="text/javascript" src="../dist/js/i18n/datepicker.en.js"></script>
<script type="text/javascript" src="../dist/js/i18n/datepicker.de.js"></script>

<script type="text/javascript" src="../node_modules/mocha/mocha.js"></script>
<script type="text/javascript" src="../node_modules/chai/chai.js"></script>
Expand Down
10 changes: 9 additions & 1 deletion tests/specs/options.js
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,6 @@ describe('Options', function () {
'yy': 15,
'yyyy1': 2010,
'yyyy2': 2019

};

for (var format in formats) {
Expand All @@ -151,6 +150,15 @@ describe('Options', function () {
})
}(format))
}

it('should work with special characters', function () {
dp = $input.datepicker({
language: 'de',
dateFormat: 'Month is MM'
}).data('datepicker');
dp.selectDate(new Date(2016, 2, 1));
expect(dp.$el.val()).to.be.equal('Month is März');
})
});

describe('altField', function () {
Expand Down

0 comments on commit d9aea00

Please sign in to comment.