@@ -58,6 +58,10 @@ function Timepicker() {
58
58
hourMax : 23 ,
59
59
minuteMax : 59 ,
60
60
secondMax : 59 ,
61
+
62
+ minDateTime : null ,
63
+ maxDateTime : null ,
64
+
61
65
hourGrid : 0 ,
62
66
minuteGrid : 0 ,
63
67
secondGrid : 0 ,
@@ -77,6 +81,12 @@ $.extend(Timepicker.prototype, {
77
81
hour : 0 ,
78
82
minute : 0 ,
79
83
second : 0 ,
84
+ hourMinOriginal : null ,
85
+ minuteMinOriginal : null ,
86
+ secondMinOriginal : null ,
87
+ hourMaxOriginal : null ,
88
+ minuteMaxOriginal : null ,
89
+ secondMaxOriginal : null ,
80
90
ampm : '' ,
81
91
formattedDate : '' ,
82
92
formattedTime : '' ,
@@ -145,12 +155,13 @@ $.extend(Timepicker.prototype, {
145
155
//########################################################################
146
156
// add our sliders to the calendar
147
157
//########################################################################
148
- _addTimePicker : function ( ) {
158
+ _addTimePicker : function ( dp_inst ) {
149
159
var currDT = ( this . $altInput ) ?
150
160
this . $input . val ( ) + ' ' + this . $altInput . val ( ) :
151
161
this . $input . val ( ) ;
152
162
153
163
this . timeDefined = this . _parseTime ( currDT ) ;
164
+ this . _limitMinMaxDateTime ( dp_inst , false ) ;
154
165
this . _injectTimePicker ( ) ;
155
166
} ,
156
167
@@ -438,6 +449,67 @@ $.extend(Timepicker.prototype, {
438
449
}
439
450
} ,
440
451
452
+ //########################################################################
453
+ // This function tries to limit the ability to go outside the
454
+ // min/max date range
455
+ //########################################################################
456
+ _limitMinMaxDateTime : function ( dp_inst , adjustSliders ) {
457
+ var o = this . _defaults ,
458
+ dp_date = new Date ( dp_inst . selectedYear , dp_inst . selectedMonth , dp_inst . selectedDay ) ,
459
+ tp_date = new Date ( dp_inst . selectedYear , dp_inst . selectedMonth , dp_inst . selectedDay , this . hour , this . minute , this . second , 0 ) ;
460
+
461
+ if ( this . _defaults . minDateTime !== null && dp_date ) {
462
+ var minDateTime = this . _defaults . minDateTime ,
463
+ minDateTimeDate = new Date ( minDateTime . getFullYear ( ) , minDateTime . getMonth ( ) , minDateTime . getDate ( ) , 0 , 0 , 0 , 0 ) ;
464
+
465
+ if ( this . hourMinOriginal === null || this . minuteMinOriginal === null || this . secondMinOriginal === null ) {
466
+ this . hourMinOriginal = o . hourMin ;
467
+ this . minuteMinOriginal = o . minuteMin ;
468
+ this . secondMinOriginal = o . secondMin ;
469
+ }
470
+
471
+ if ( minDateTimeDate . getTime ( ) == dp_date . getTime ( ) ) {
472
+ this . _defaults . hourMin = minDateTime . getHours ( ) ;
473
+ this . _defaults . minuteMin = minDateTime . getMinutes ( ) ;
474
+ this . _defaults . secondMin = minDateTime . getSeconds ( ) ;
475
+ } else {
476
+ this . _defaults . hourMin = this . hourMinOriginal ;
477
+ this . _defaults . minuteMin = this . minuteMinOriginal ;
478
+ this . _defaults . secondMin = this . secondMinOriginal ;
479
+ }
480
+ }
481
+
482
+ if ( this . _defaults . maxDateTime !== null && dp_date ) {
483
+ var maxDateTime = this . _defaults . maxDateTime ,
484
+ maxDateTimeDate = new Date ( maxDateTime . getFullYear ( ) , maxDateTime . getMonth ( ) , maxDateTime . getDate ( ) , 0 , 0 , 0 , 0 ) ;
485
+
486
+ if ( this . hourMaxOriginal === null || this . minuteMaxOriginal === null || this . secondMaxOriginal === null ) {
487
+ this . hourMaxOriginal = o . hourMax ;
488
+ this . minuteMaxOriginal = o . minuteMax ;
489
+ this . secondMaxOriginal = o . secondMax ;
490
+ }
491
+
492
+ if ( maxDateTimeDate . getTime ( ) == dp_date . getTime ( ) ) {
493
+ this . _defaults . hourMax = maxDateTime . getHours ( ) ;
494
+ this . _defaults . minuteMax = maxDateTime . getMinutes ( ) ;
495
+ this . _defaults . secondMax = maxDateTime . getSeconds ( ) ;
496
+ } else {
497
+ this . _defaults . hourMax = this . hourMaxOriginal ;
498
+ this . _defaults . minuteMax = this . minuteMaxOriginal ;
499
+ this . _defaults . secondMax = this . secondMaxOriginal ;
500
+ }
501
+ }
502
+
503
+ if ( adjustSliders !== undefined && adjustSliders === true ) {
504
+ this . hour_slider . slider ( "option" , { min : this . _defaults . hourMin , max : this . _defaults . hourMax } ) ;
505
+ this . minute_slider . slider ( "option" , { min : this . _defaults . minuteMin , max : this . _defaults . minuteMax } ) ;
506
+ this . second_slider . slider ( "option" , { min : this . _defaults . secondMin , max : this . _defaults . secondMax } ) ;
507
+ }
508
+
509
+ $ . datepicker . _setTime ( dp_inst , tp_date ) ;
510
+
511
+ } ,
512
+
441
513
//########################################################################
442
514
// when a slider moves, set the internal time...
443
515
// on time change is also called when the time is updated in the text field
@@ -581,6 +653,7 @@ $.datepicker._selectDate = function (id, dateStr) {
581
653
tp_inst = this . _get ( inst , 'timepicker' ) ;
582
654
583
655
if ( tp_inst ) {
656
+ tp_inst . _limitMinMaxDateTime ( inst , true ) ;
584
657
inst . inline = inst . stay_open = true ;
585
658
this . _base_selectDate ( id , dateStr ) ;
586
659
inst . inline = inst . stay_open = false ;
@@ -597,10 +670,12 @@ $.datepicker._selectDate = function (id, dateStr) {
597
670
$ . datepicker . _base_updateDatepicker = $ . datepicker . _updateDatepicker ;
598
671
$ . datepicker . _updateDatepicker = function ( inst ) {
599
672
if ( typeof ( inst . stay_open ) !== 'boolean' || inst . stay_open === false ) {
673
+
600
674
this . _base_updateDatepicker ( inst ) ;
675
+
601
676
// Reload the time control when changing something in the input text field.
602
677
var tp_inst = this . _get ( inst , 'timepicker' ) ;
603
- if ( tp_inst ) tp_inst . _addTimePicker ( ) ;
678
+ if ( tp_inst ) tp_inst . _addTimePicker ( inst ) ;
604
679
}
605
680
} ;
606
681
0 commit comments