Skip to content

Commit 95d71b6

Browse files
committed
Fix month moving forward if current day in month is not present in month from input
1 parent cede41e commit 95d71b6

File tree

1 file changed

+23
-21
lines changed

1 file changed

+23
-21
lines changed

webroot/js/app/components/DatePicker.js

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
App.Components.DatePickerComponent = Frontend.Component.extend({
2-
setup: function($elements) {
3-
$elements.each(function(i, element) {
2+
setup: function ($elements) {
3+
$elements.each(function (i, element) {
44
var $container = $(element);
55

66
if ($container.data('datePickerApplied')) {
@@ -21,7 +21,7 @@ App.Components.DatePickerComponent = Frontend.Component.extend({
2121

2222
var type = $container.hasClass('dateTime') ? 'dateTime' : 'date';
2323
var format = 'DD.MM.YYYY';
24-
if(type === 'dateTime') {
24+
if (type === 'dateTime') {
2525
format = 'DD.MM.YYYY HH:mm';
2626
}
2727

@@ -58,63 +58,65 @@ App.Components.DatePickerComponent = Frontend.Component.extend({
5858
});
5959

6060
// Update the selects to the correct values after a datepicker change
61-
$picker.on('dp.change', function(e) {
61+
$picker.on('dp.change', function (e) {
6262
var $container = $(e.currentTarget).parents('.form-group');
6363
this._updateSelects($container, e.date, $(e.currentTarget));
6464
}.bind(this));
6565

6666
$container.data('datePickerApplied', true);
6767
}.bind(this));
6868
},
69-
_updateSelects: function($selectContainer, date, input) {
69+
_updateSelects: function ($selectContainer, date, input) {
7070
if (input.find('input').val().length == 0) {
71-
$selectContainer.find('select option[selected="selected"]').each(function(i, el) {
71+
$selectContainer.find('select option[selected="selected"]').each(function (i, el) {
7272
$(el).removeAttr("selected");
7373
});
7474
return null;
7575
}
76-
$selectContainer.find('select').each(function(i, el) {
76+
$selectContainer.find('select').each(function (i, el) {
7777
var $select = $(el);
7878
var previousValue = $select.val();
79-
if($select.attr('name').indexOf('[year]') > -1) {
79+
if ($select.attr('name').indexOf('[year]') > -1) {
8080
$select.val(date.year());
8181
}
82-
if($select.attr('name').indexOf('[month]') > -1) {
82+
if ($select.attr('name').indexOf('[month]') > -1) {
8383
$select.val(date.format('MM'));
8484
}
85-
if($select.attr('name').indexOf('[day]') > -1) {
85+
if ($select.attr('name').indexOf('[day]') > -1) {
8686
$select.val(date.format('DD'));
8787
}
88-
if($select.attr('name').indexOf('[hour]') > -1) {
88+
if ($select.attr('name').indexOf('[hour]') > -1) {
8989
$select.val(date.format('HH'));
9090
}
91-
if($select.attr('name').indexOf('[minute]') > -1) {
91+
if ($select.attr('name').indexOf('[minute]') > -1) {
9292
$select.val(date.format('mm'));
9393
}
9494
if (previousValue != $select.val()) {
9595
$select.change();
9696
}
9797
});
9898
},
99-
_getDateFromSelects: function($selectContainer) {
99+
_getDateFromSelects: function ($selectContainer) {
100100
var date = new Date();
101-
102-
$selectContainer.find('select').each(function(i, el) {
101+
102+
$selectContainer.find('select').each(function (i, el) {
103103
var $select = $(el);
104104
var val = parseInt($select.val(), 10);
105-
if($select.attr('name').indexOf('[year]') > -1) {
105+
if ($select.attr('name').indexOf('[year]') > -1) {
106106
date.setFullYear(val);
107107
}
108-
if($select.attr('name').indexOf('[month]') > -1) {
109-
date.setMonth(val - 1);
108+
if ($select.attr('name').indexOf('[month]') > -1) {
109+
// set day of month (second argument) manually to first to prevent current day influencing the month in date
110+
// (if current day is 31 and the month val-1 has less days, the month of date after setMonth will be val)
111+
date.setMonth(val - 1, 1);
110112
}
111-
if($select.attr('name').indexOf('[day]') > -1) {
113+
if ($select.attr('name').indexOf('[day]') > -1) {
112114
date.setDate(val);
113115
}
114-
if($select.attr('name').indexOf('[hour]') > -1) {
116+
if ($select.attr('name').indexOf('[hour]') > -1) {
115117
date.setHours(val);
116118
}
117-
if($select.attr('name').indexOf('[minute]') > -1) {
119+
if ($select.attr('name').indexOf('[minute]') > -1) {
118120
date.setMinutes(val);
119121
}
120122
});

0 commit comments

Comments
 (0)