11App . 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