@@ -233,9 +233,11 @@ $.extend(Timepicker.prototype, {
233233 // parse the time string from input value or _setTime
234234 //########################################################################
235235 _parseTime : function ( timeString , withDate ) {
236+ if ( ! this . inst )
237+ this . inst = $ . datepicker . _getInst ( this . $input [ 0 ] ) ;
238+
236239 if ( withDate || ! this . _defaults . timeOnly )
237240 {
238- if ( ! this . inst ) this . inst = $ . datepicker . _getInst ( this . $input [ 0 ] ) ;
239241 var dp_dateFormat = $ . datepicker . _get ( this . inst , 'dateFormat' ) ;
240242 try {
241243 var parseRes = parseDateTimeInternal ( dp_dateFormat , this . _defaults . timeFormat , timeString , $ . datepicker . _getFormatConfig ( this . inst ) , this . _defaults ) ;
@@ -250,7 +252,8 @@ $.extend(Timepicker.prototype, {
250252 else
251253 {
252254 var timeObj = $ . datepicker . parseTime ( this . _defaults . timeFormat , timeString , this . _defaults ) ;
253- $ . extend ( this , parseRes . timeObj ) ;
255+ if ( ! timeObj ) return false ;
256+ $ . extend ( this , timeObj ) ;
254257 return true ;
255258 }
256259 } ,
@@ -851,114 +854,115 @@ $.fn.extend({
851854} ) ;
852855
853856$ . datepicker . parseDateTime = function ( dateFormat , timeFormat , dateTimeString , dateSettings , timeSettings ) {
854- var parseRes = parseDateTimeInternal ( dateFormat , timeFormat , dateTimeString , dateSettings , timeSettings ) ;
855- if ( parseRes . timeObj )
856- {
857- var t = parseRes . timeObj ;
858- parseRes . date . setHours ( t . hour , t . minute , t . second , t . millisec ) ;
859- }
860-
857+ var parseRes = parseDateTimeInternal ( dateFormat , timeFormat , dateTimeString , dateSettings , timeSettings ) ;
858+ if ( parseRes . timeObj )
859+ {
860+ var t = parseRes . timeObj ;
861+ parseRes . date . setHours ( t . hour , t . minute , t . second , t . millisec ) ;
862+ }
863+
861864 return parseRes . date ;
862865}
863866
864867$ . datepicker . parseTime = function ( timeFormat , timeString , options ) {
865-
866- //########################################################################
868+
869+ //########################################################################
867870 // pattern for standard and localized AM/PM markers
868871 //########################################################################
869- var getPatternAmpm = function ( amNames , pmNames ) {
870- var markers = [ ] ;
871- if ( amNames )
872- $ . merge ( markers , amNames ) ;
873- if ( pmNames )
874- $ . merge ( markers , pmNames ) ;
875- markers = $ . map ( markers , function ( val ) { return val . replace ( / [ . * + ? | ( ) \[ \] { } \\ ] / g, '\\$&' ) ; } ) ;
876- return '(' + markers . join ( '|' ) + ')?' ;
877- }
878-
879- //########################################################################
872+ var getPatternAmpm = function ( amNames , pmNames ) {
873+ var markers = [ ] ;
874+ if ( amNames )
875+ $ . merge ( markers , amNames ) ;
876+ if ( pmNames )
877+ $ . merge ( markers , pmNames ) ;
878+ markers = $ . map ( markers , function ( val ) { return val . replace ( / [ . * + ? | ( ) \[ \] { } \\ ] / g, '\\$&' ) ; } ) ;
879+ return '(' + markers . join ( '|' ) + ')?' ;
880+ }
881+
882+ //########################################################################
880883 // figure out position of time elements.. cause js cant do named captures
881884 //########################################################################
882- var getFormatPositions = function ( timeFormat ) {
883- var finds = timeFormat . toLowerCase ( ) . match ( / ( h { 1 , 2 } | m { 1 , 2 } | s { 1 , 2 } | l { 1 } | t { 1 , 2 } | z ) / g) ,
884- orders = { h : - 1 , m : - 1 , s : - 1 , l : - 1 , t : - 1 , z : - 1 } ;
885+ var getFormatPositions = function ( timeFormat ) {
886+ var finds = timeFormat . toLowerCase ( ) . match ( / ( h { 1 , 2 } | m { 1 , 2 } | s { 1 , 2 } | l { 1 } | t { 1 , 2 } | z ) / g) ,
887+ orders = { h : - 1 , m : - 1 , s : - 1 , l : - 1 , t : - 1 , z : - 1 } ;
885888
886- if ( finds )
887- for ( var i = 0 ; i < finds . length ; i ++ )
888- if ( orders [ finds [ i ] . toString ( ) . charAt ( 0 ) ] == - 1 )
889- orders [ finds [ i ] . toString ( ) . charAt ( 0 ) ] = i + 1 ;
889+ if ( finds )
890+ for ( var i = 0 ; i < finds . length ; i ++ )
891+ if ( orders [ finds [ i ] . toString ( ) . charAt ( 0 ) ] == - 1 )
892+ orders [ finds [ i ] . toString ( ) . charAt ( 0 ) ] = i + 1 ;
890893
891- return orders ;
892- }
894+ return orders ;
895+ }
893896
894- var o = extendRemove ( extendRemove ( { } , $ . timepicker . _defaults ) , options || { } ) ;
897+ var o = extendRemove ( extendRemove ( { } , $ . timepicker . _defaults ) , options || { } ) ;
895898
896- var regstr = '^' + timeFormat . toString ( )
897- . replace ( / h { 1 , 2 } / ig, '(\\d?\\d)' )
898- . replace ( / m { 1 , 2 } / ig, '(\\d?\\d)' )
899- . replace ( / s { 1 , 2 } / ig, '(\\d?\\d)' )
900- . replace ( / l { 1 } / ig, '(\\d?\\d?\\d)' )
901- . replace ( / t { 1 , 2 } / ig, getPatternAmpm ( o . amNames , o . pmNames ) )
902- . replace ( / z { 1 } / ig, '(z|[-+]\\d\\d:?\\d\\d)?' )
903- . replace ( / \s / g, '\\s?' ) + o . timeSuffix + '$' ,
904- order = getFormatPositions ( timeFormat ) ,
905- ampm = '' ,
906- treg ;
907-
908- treg = timeString . match ( new RegExp ( regstr , 'i' ) ) ;
909-
910- var resTime = { hour : 0 , minute : 0 , second : 0 , millisec : 0 } ;
899+ var regstr = '^' + timeFormat . toString ( )
900+ . replace ( / h { 1 , 2 } / ig, '(\\d?\\d)' )
901+ . replace ( / m { 1 , 2 } / ig, '(\\d?\\d)' )
902+ . replace ( / s { 1 , 2 } / ig, '(\\d?\\d)' )
903+ . replace ( / l { 1 } / ig, '(\\d?\\d?\\d)' )
904+ . replace ( / t { 1 , 2 } / ig, getPatternAmpm ( o . amNames , o . pmNames ) )
905+ . replace ( / z { 1 } / ig, '(z|[-+]\\d\\d:?\\d\\d)?' )
906+ . replace ( / \s / g, '\\s?' ) + o . timeSuffix + '$' ,
907+ order = getFormatPositions ( timeFormat ) ,
908+ ampm = '' ,
909+ treg ;
910+
911+ treg = timeString . match ( new RegExp ( regstr , 'i' ) ) ;
912+
913+ var resTime = { hour : 0 , minute : 0 , second : 0 , millisec : 0 } ;
911914
912- if ( treg ) {
913- if ( order . t !== - 1 ) {
914- if ( treg [ order . t ] === undefined || treg [ order . t ] . length === 0 ) {
915- ampm = '' ;
916- resTime . ampm = '' ;
917- } else {
918- ampm = $ . inArray ( treg [ order . t ] , o . amNames ) !== - 1 ? 'AM' : 'PM' ;
919- resTime . ampm = o [ ampm == 'AM' ? 'amNames' : 'pmNames' ] [ 0 ] ;
920- }
921- }
915+ if ( treg ) {
916+ if ( order . t !== - 1 ) {
917+ if ( treg [ order . t ] === undefined || treg [ order . t ] . length === 0 ) {
918+ ampm = '' ;
919+ resTime . ampm = '' ;
920+ } else {
921+ ampm = $ . inArray ( treg [ order . t ] , o . amNames ) !== - 1 ? 'AM' : 'PM' ;
922+ resTime . ampm = o [ ampm == 'AM' ? 'amNames' : 'pmNames' ] [ 0 ] ;
923+ }
924+ }
922925
923- if ( order . h !== - 1 ) {
924- if ( ampm == 'AM' && treg [ order . h ] == '12' )
925- resTime . hour = 0 ; // 12am = 0 hour
926- else if ( ampm == 'PM' && treg [ order . h ] != '12' )
927- resTime . hour = parseInt ( treg [ order . h ] , 10 ) + 12 ; // 12pm = 12 hour, any other pm = hour + 12
928- else resTime . hour = Number ( treg [ order . h ] ) ;
929- }
926+ if ( order . h !== - 1 ) {
927+ if ( ampm == 'AM' && treg [ order . h ] == '12' )
928+ resTime . hour = 0 ; // 12am = 0 hour
929+ else if ( ampm == 'PM' && treg [ order . h ] != '12' )
930+ resTime . hour = parseInt ( treg [ order . h ] , 10 ) + 12 ; // 12pm = 12 hour, any other pm = hour + 12
931+ else resTime . hour = Number ( treg [ order . h ] ) ;
932+ }
930933
931- if ( order . m !== - 1 ) resTime . minute = Number ( treg [ order . m ] ) ;
932- if ( order . s !== - 1 ) resTime . second = Number ( treg [ order . s ] ) ;
933- if ( order . l !== - 1 ) resTime . millisec = Number ( treg [ order . l ] ) ;
934- if ( order . z !== - 1 && treg [ order . z ] !== undefined ) {
935- var tz = treg [ order . z ] . toUpperCase ( ) ;
936- switch ( tz . length ) {
937- case 1 : // Z
938- tz = o . timezoneIso8601 ? 'Z' : '+0000' ;
939- break ;
940- case 5 : // +hhmm
941- if ( o . timezoneIso8601 )
942- tz = tz . substring ( 1 ) == '0000'
943- ? 'Z'
944- : tz . substring ( 0 , 3 ) + ':' + tz . substring ( 3 ) ;
945- break ;
946- case 6 : // +hh:mm
947- if ( ! o . timezoneIso8601 )
948- tz = tz == 'Z' || tz . substring ( 1 ) == '00:00'
949- ? '+0000'
950- : tz . replace ( / : / , '' ) ;
951- else if ( tz . substring ( 1 ) == '00:00' )
952- tz = 'Z' ;
953- break ;
954- }
955- resTime . timezone = tz ;
956- }
934+ if ( order . m !== - 1 ) resTime . minute = Number ( treg [ order . m ] ) ;
935+ if ( order . s !== - 1 ) resTime . second = Number ( treg [ order . s ] ) ;
936+ if ( order . l !== - 1 ) resTime . millisec = Number ( treg [ order . l ] ) ;
937+ if ( order . z !== - 1 && treg [ order . z ] !== undefined ) {
938+ var tz = treg [ order . z ] . toUpperCase ( ) ;
939+ switch ( tz . length ) {
940+ case 1 : // Z
941+ tz = o . timezoneIso8601 ? 'Z' : '+0000' ;
942+ break ;
943+ case 5 : // +hhmm
944+ if ( o . timezoneIso8601 )
945+ tz = tz . substring ( 1 ) == '0000'
946+ ? 'Z'
947+ : tz . substring ( 0 , 3 ) + ':' + tz . substring ( 3 ) ;
948+ break ;
949+ case 6 : // +hh:mm
950+ if ( ! o . timezoneIso8601 )
951+ tz = tz == 'Z' || tz . substring ( 1 ) == '00:00'
952+ ? '+0000'
953+ : tz . replace ( / : / , '' ) ;
954+ else if ( tz . substring ( 1 ) == '00:00' )
955+ tz = 'Z' ;
956+ break ;
957+ }
958+ resTime . timezone = tz ;
959+ }
957960
958- return resTime ;
959961
960- }
961- return null ;
962+ return resTime ;
963+ }
964+
965+ return false ;
962966} ,
963967
964968//########################################################################
@@ -1402,4 +1406,4 @@ var parseDateTimeInternal = function(dateFormat, timeFormat, dateTimeString, dat
14021406$ . timepicker = new Timepicker ( ) ; // singleton instance
14031407$ . timepicker . version = "1.0.1" ;
14041408
1405- } ) ( jQuery ) ;
1409+ } ) ( jQuery ) ;
0 commit comments