├── css └── custom-theme │ ├── images │ ├── animated-overlay.gif │ ├── ui-icons_222222_256x240.png │ ├── ui-icons_4b8e0b_256x240.png │ ├── ui-icons_a83300_256x240.png │ ├── ui-icons_cccccc_256x240.png │ ├── ui-icons_ffffff_256x240.png │ ├── ui-bg_flat_100_468692_40x100.png │ ├── ui-bg_flat_30_cccccc_40x100.png │ ├── ui-bg_flat_50_5c5c5c_40x100.png │ ├── ui-bg_glass_20_468692_1x400.png │ ├── ui-bg_glass_40_0078a3_1x400.png │ ├── ui-bg_glass_40_ffc73d_1x400.png │ ├── ui-bg_inset-soft_30_f58400_1x100.png │ ├── ui-bg_highlight-hard_25_ffffff_1x100.png │ └── ui-bg_highlight-soft_80_eeeeee_1x100.png │ └── jquery-ui-1.10.4.custom.min.css ├── README.md ├── js ├── scripts.js ├── datepicker.js └── jquery.js └── index.html /css/custom-theme/images/animated-overlay.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcblogdev/addhourtodatetimepicker/master/css/custom-theme/images/animated-overlay.gif -------------------------------------------------------------------------------- /css/custom-theme/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcblogdev/addhourtodatetimepicker/master/css/custom-theme/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /css/custom-theme/images/ui-icons_4b8e0b_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcblogdev/addhourtodatetimepicker/master/css/custom-theme/images/ui-icons_4b8e0b_256x240.png -------------------------------------------------------------------------------- /css/custom-theme/images/ui-icons_a83300_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcblogdev/addhourtodatetimepicker/master/css/custom-theme/images/ui-icons_a83300_256x240.png -------------------------------------------------------------------------------- /css/custom-theme/images/ui-icons_cccccc_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcblogdev/addhourtodatetimepicker/master/css/custom-theme/images/ui-icons_cccccc_256x240.png -------------------------------------------------------------------------------- /css/custom-theme/images/ui-icons_ffffff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcblogdev/addhourtodatetimepicker/master/css/custom-theme/images/ui-icons_ffffff_256x240.png -------------------------------------------------------------------------------- /css/custom-theme/images/ui-bg_flat_100_468692_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcblogdev/addhourtodatetimepicker/master/css/custom-theme/images/ui-bg_flat_100_468692_40x100.png -------------------------------------------------------------------------------- /css/custom-theme/images/ui-bg_flat_30_cccccc_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcblogdev/addhourtodatetimepicker/master/css/custom-theme/images/ui-bg_flat_30_cccccc_40x100.png -------------------------------------------------------------------------------- /css/custom-theme/images/ui-bg_flat_50_5c5c5c_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcblogdev/addhourtodatetimepicker/master/css/custom-theme/images/ui-bg_flat_50_5c5c5c_40x100.png -------------------------------------------------------------------------------- /css/custom-theme/images/ui-bg_glass_20_468692_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcblogdev/addhourtodatetimepicker/master/css/custom-theme/images/ui-bg_glass_20_468692_1x400.png -------------------------------------------------------------------------------- /css/custom-theme/images/ui-bg_glass_40_0078a3_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcblogdev/addhourtodatetimepicker/master/css/custom-theme/images/ui-bg_glass_40_0078a3_1x400.png -------------------------------------------------------------------------------- /css/custom-theme/images/ui-bg_glass_40_ffc73d_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcblogdev/addhourtodatetimepicker/master/css/custom-theme/images/ui-bg_glass_40_ffc73d_1x400.png -------------------------------------------------------------------------------- /css/custom-theme/images/ui-bg_inset-soft_30_f58400_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcblogdev/addhourtodatetimepicker/master/css/custom-theme/images/ui-bg_inset-soft_30_f58400_1x100.png -------------------------------------------------------------------------------- /css/custom-theme/images/ui-bg_highlight-hard_25_ffffff_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcblogdev/addhourtodatetimepicker/master/css/custom-theme/images/ui-bg_highlight-hard_25_ffffff_1x100.png -------------------------------------------------------------------------------- /css/custom-theme/images/ui-bg_highlight-soft_80_eeeeee_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcblogdev/addhourtodatetimepicker/master/css/custom-theme/images/ui-bg_highlight-soft_80_eeeeee_1x100.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Add hour to datetimepicker 2 | ============= 3 | 4 | adds an hour to the To field from the datetimepicker 5 | 6 | These files acompany the tutorial: [Add hour to datetimepicker](https://daveismyname.com/add-hour-to-datetimepicker-bp) 7 | 8 | -------------------------------------------------------------------------------- /js/scripts.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function() { 2 | 3 | //call datepicker 4 | $('body').on('click', '.datetimepicker', function() { 5 | $(this).not('.hasDateTimePicker').datetimepicker({changeMonth: true,changeYear: true,dateFormat: "yy-mm-dd",timeFormat: 'HH:mm:00',yearRange: "1900:+10",showOn:'focus'}).focus(); 6 | }); 7 | 8 | //update date with an id of from into an id of to 9 | $('#from').change(function () { 10 | var d = $('#from').val(); 11 | d = new Date(d); 12 | 13 | var month = ('0' + (d.getMonth()+1)).slice(-2); 14 | var year = d.getFullYear(); 15 | var day = ('0'+d.getDate()).slice(-2); 16 | 17 | var hour = d.getHours()+1; 18 | var min = ('0'+d.getMinutes()).slice(-2); 19 | var sec = ('0'+d.getMilliseconds()).slice(-2); 20 | 21 | newdate = year+'-'+month+'-'+day+' '+hour+':'+min+':'+sec; 22 | $('#to').val(newdate); 23 | }); 24 | 25 | }); -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Add Hour to datetimepicker 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 |
15 | 16 |

Add hour from datetimepicker

17 | 18 |
19 | 20 | 21 |
22 | 23 |
24 | 25 | 26 |
27 | 28 |

Read the full Add hour from datetimepicker Tutorial

29 | 30 |
31 | 32 |
33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /css/custom-theme/jquery-ui-1.10.4.custom.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-05-24 2 | * http://jqueryui.com 3 | * Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css 4 | * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Segoe%20UI%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=%23468692&bgTextureHeader=flat&bgImgOpacityHeader=100&borderColorHeader=%23333333&fcHeader=%23ffffff&iconColorHeader=%23ffffff&bgColorContent=%23ffffff&bgTextureContent=highlight_hard&bgImgOpacityContent=25&borderColorContent=%23666666&fcContent=%23000000&iconColorContent=%23cccccc&bgColorDefault=%23468692&bgTextureDefault=glass&bgImgOpacityDefault=20&borderColorDefault=%23666666&fcDefault=%23eeeeee&iconColorDefault=%23cccccc&bgColorHover=%230078a3&bgTextureHover=glass&bgImgOpacityHover=40&borderColorHover=%2359b4d4&fcHover=%23ffffff&iconColorHover=%23ffffff&bgColorActive=%23f58400&bgTextureActive=inset_soft&bgImgOpacityActive=30&borderColorActive=%23ffaf0f&fcActive=%23ffffff&iconColorActive=%23222222&bgColorHighlight=%23eeeeee&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=80&borderColorHighlight=%23cccccc&fcHighlight=%232e7db2&iconColorHighlight=%234b8e0b&bgColorError=%23ffc73d&bgTextureError=glass&bgImgOpacityError=40&borderColorError=%23ffb73d&fcError=%23111111&iconColorError=%23a83300&bgColorOverlay=%235c5c5c&bgTextureOverlay=flat&bgImgOpacityOverlay=50&opacityOverlay=80&bgColorShadow=%23cccccc&bgTextureShadow=flat&bgImgOpacityShadow=30&opacityShadow=60&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px 5 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 6 | 7 | .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:15em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:none}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:normal}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px}.ui-menu .ui-state-disabled{font-weight:normal;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("images/animated-overlay.gif");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Segoe UI,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Segoe UI,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #666;background:#fff url("images/ui-bg_highlight-hard_25_ffffff_1x100.png") 50% top repeat-x;color:#000}.ui-widget-content a{color:#000}.ui-widget-header{border:1px solid #333;background:#468692 url("images/ui-bg_flat_100_468692_40x100.png") 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #666;background:#468692 url("images/ui-bg_glass_20_468692_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#eee}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#eee;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #59b4d4;background:#0078a3 url("images/ui-bg_glass_40_0078a3_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#fff}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#fff;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #ffaf0f;background:#f58400 url("images/ui-bg_inset-soft_30_f58400_1x100.png") 50% 50% repeat-x;font-weight:bold;color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #ccc;background:#eee url("images/ui-bg_highlight-soft_80_eeeeee_1x100.png") 50% top repeat-x;color:#2e7db2}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#2e7db2}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #ffb73d;background:#ffc73d url("images/ui-bg_glass_40_ffc73d_1x400.png") 50% 50% repeat-x;color:#111}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#111}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#111}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_cccccc_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_cccccc_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_4b8e0b_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_a83300_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:6px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:6px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:6px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:6px}.ui-widget-overlay{background:#5c5c5c url("images/ui-bg_flat_50_5c5c5c_40x100.png") 50% 50% repeat-x;opacity:.8;filter:Alpha(Opacity=80)}.ui-widget-shadow{margin:-7px 0 0 -7px;padding:7px;background:#ccc url("images/ui-bg_flat_30_cccccc_40x100.png") 50% 50% repeat-x;opacity:.6;filter:Alpha(Opacity=60);border-radius:8px} -------------------------------------------------------------------------------- /js/datepicker.js: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery timepicker addon 3 | * By: Trent Richardson [http://trentrichardson.com] 4 | * Version 1.1.1 5 | * Last Modified: 11/07/2012 6 | * 7 | * Copyright 2012 Trent Richardson 8 | * You may use this project under MIT or GPL licenses. 9 | * http://trentrichardson.com/Impromptu/GPL-LICENSE.txt 10 | * http://trentrichardson.com/Impromptu/MIT-LICENSE.txt 11 | */ 12 | 13 | /*jslint evil: true, white: false, undef: false, nomen: false */ 14 | 15 | (function($) { 16 | 17 | /* 18 | * Lets not redefine timepicker, Prevent "Uncaught RangeError: Maximum call stack size exceeded" 19 | */ 20 | $.ui.timepicker = $.ui.timepicker || {}; 21 | if ($.ui.timepicker.version) { 22 | return; 23 | } 24 | 25 | /* 26 | * Extend jQueryUI, get it started with our version number 27 | */ 28 | $.extend($.ui, { 29 | timepicker: { 30 | version: "1.1.1" 31 | } 32 | }); 33 | 34 | /* 35 | * Timepicker manager. 36 | * Use the singleton instance of this class, $.timepicker, to interact with the time picker. 37 | * Settings for (groups of) time pickers are maintained in an instance object, 38 | * allowing multiple different settings on the same page. 39 | */ 40 | function Timepicker() { 41 | this.regional = []; // Available regional settings, indexed by language code 42 | this.regional[''] = { // Default regional settings 43 | currentText: 'Now', 44 | closeText: 'Done', 45 | amNames: ['AM', 'A'], 46 | pmNames: ['PM', 'P'], 47 | timeFormat: 'HH:mm', 48 | timeSuffix: '', 49 | timeOnlyTitle: 'Choose Time', 50 | timeText: 'Time', 51 | hourText: 'Hour', 52 | minuteText: 'Minute', 53 | secondText: 'Second', 54 | millisecText: 'Millisecond', 55 | timezoneText: 'Time Zone', 56 | isRTL: false 57 | }; 58 | this._defaults = { // Global defaults for all the datetime picker instances 59 | showButtonPanel: true, 60 | timeOnly: false, 61 | showHour: true, 62 | showMinute: true, 63 | showSecond: false, 64 | showMillisec: false, 65 | showTimezone: false, 66 | showTime: true, 67 | stepHour: 1, 68 | stepMinute: 1, 69 | stepSecond: 1, 70 | stepMillisec: 1, 71 | hour: 0, 72 | minute: 0, 73 | second: 0, 74 | millisec: 0, 75 | timezone: null, 76 | useLocalTimezone: false, 77 | defaultTimezone: "+0000", 78 | hourMin: 0, 79 | minuteMin: 0, 80 | secondMin: 0, 81 | millisecMin: 0, 82 | hourMax: 23, 83 | minuteMax: 59, 84 | secondMax: 59, 85 | millisecMax: 999, 86 | minDateTime: null, 87 | maxDateTime: null, 88 | onSelect: null, 89 | hourGrid: 0, 90 | minuteGrid: 0, 91 | secondGrid: 0, 92 | millisecGrid: 0, 93 | alwaysSetTime: true, 94 | separator: ' ', 95 | altFieldTimeOnly: true, 96 | altTimeFormat: null, 97 | altSeparator: null, 98 | altTimeSuffix: null, 99 | pickerTimeFormat: null, 100 | pickerTimeSuffix: null, 101 | showTimepicker: true, 102 | timezoneIso8601: false, 103 | timezoneList: null, 104 | addSliderAccess: false, 105 | sliderAccessArgs: null, 106 | controlType: 'slider', 107 | defaultValue: null, 108 | parse: 'strict' 109 | }; 110 | $.extend(this._defaults, this.regional['']); 111 | } 112 | 113 | $.extend(Timepicker.prototype, { 114 | $input: null, 115 | $altInput: null, 116 | $timeObj: null, 117 | inst: null, 118 | hour_slider: null, 119 | minute_slider: null, 120 | second_slider: null, 121 | millisec_slider: null, 122 | timezone_select: null, 123 | hour: 0, 124 | minute: 0, 125 | second: 0, 126 | millisec: 0, 127 | timezone: null, 128 | defaultTimezone: "+0000", 129 | hourMinOriginal: null, 130 | minuteMinOriginal: null, 131 | secondMinOriginal: null, 132 | millisecMinOriginal: null, 133 | hourMaxOriginal: null, 134 | minuteMaxOriginal: null, 135 | secondMaxOriginal: null, 136 | millisecMaxOriginal: null, 137 | ampm: '', 138 | formattedDate: '', 139 | formattedTime: '', 140 | formattedDateTime: '', 141 | timezoneList: null, 142 | units: ['hour','minute','second','millisec'], 143 | control: null, 144 | 145 | /* 146 | * Override the default settings for all instances of the time picker. 147 | * @param settings object - the new settings to use as defaults (anonymous object) 148 | * @return the manager object 149 | */ 150 | setDefaults: function(settings) { 151 | extendRemove(this._defaults, settings || {}); 152 | return this; 153 | }, 154 | 155 | /* 156 | * Create a new Timepicker instance 157 | */ 158 | _newInst: function($input, o) { 159 | var tp_inst = new Timepicker(), 160 | inlineSettings = {}, 161 | fns = {}, 162 | overrides, i; 163 | 164 | for (var attrName in this._defaults) { 165 | if(this._defaults.hasOwnProperty(attrName)){ 166 | var attrValue = $input.attr('time:' + attrName); 167 | if (attrValue) { 168 | try { 169 | inlineSettings[attrName] = eval(attrValue); 170 | } catch (err) { 171 | inlineSettings[attrName] = attrValue; 172 | } 173 | } 174 | } 175 | } 176 | overrides = { 177 | beforeShow: function (input, dp_inst) { 178 | if ($.isFunction(tp_inst._defaults.evnts.beforeShow)) { 179 | return tp_inst._defaults.evnts.beforeShow.call($input[0], input, dp_inst, tp_inst); 180 | } 181 | }, 182 | onChangeMonthYear: function (year, month, dp_inst) { 183 | // Update the time as well : this prevents the time from disappearing from the $input field. 184 | tp_inst._updateDateTime(dp_inst); 185 | if ($.isFunction(tp_inst._defaults.evnts.onChangeMonthYear)) { 186 | tp_inst._defaults.evnts.onChangeMonthYear.call($input[0], year, month, dp_inst, tp_inst); 187 | } 188 | }, 189 | onClose: function (dateText, dp_inst) { 190 | if (tp_inst.timeDefined === true && $input.val() !== '') { 191 | tp_inst._updateDateTime(dp_inst); 192 | } 193 | if ($.isFunction(tp_inst._defaults.evnts.onClose)) { 194 | tp_inst._defaults.evnts.onClose.call($input[0], dateText, dp_inst, tp_inst); 195 | } 196 | } 197 | }; 198 | for (i in overrides) { 199 | if (overrides.hasOwnProperty(i)) { 200 | fns[i] = o[i] || null; 201 | } 202 | } 203 | tp_inst._defaults = $.extend({}, this._defaults, inlineSettings, o, overrides, { 204 | evnts:fns, 205 | timepicker: tp_inst // add timepicker as a property of datepicker: $.datepicker._get(dp_inst, 'timepicker'); 206 | }); 207 | tp_inst.amNames = $.map(tp_inst._defaults.amNames, function(val) { 208 | return val.toUpperCase(); 209 | }); 210 | tp_inst.pmNames = $.map(tp_inst._defaults.pmNames, function(val) { 211 | return val.toUpperCase(); 212 | }); 213 | 214 | // controlType is string - key to our this._controls 215 | if(typeof(tp_inst._defaults.controlType) === 'string'){ 216 | if($.fn[tp_inst._defaults.controlType] === undefined){ 217 | tp_inst._defaults.controlType = 'select'; 218 | } 219 | tp_inst.control = tp_inst._controls[tp_inst._defaults.controlType]; 220 | } 221 | // controlType is an object and must implement create, options, value methods 222 | else{ 223 | tp_inst.control = tp_inst._defaults.controlType; 224 | } 225 | 226 | if (tp_inst._defaults.timezoneList === null) { 227 | var timezoneList = ['-1200', '-1100', '-1000', '-0930', '-0900', '-0800', '-0700', '-0600', '-0500', '-0430', '-0400', '-0330', '-0300', '-0200', '-0100', '+0000', 228 | '+0100', '+0200', '+0300', '+0330', '+0400', '+0430', '+0500', '+0530', '+0545', '+0600', '+0630', '+0700', '+0800', '+0845', '+0900', '+0930', 229 | '+1000', '+1030', '+1100', '+1130', '+1200', '+1245', '+1300', '+1400']; 230 | 231 | if (tp_inst._defaults.timezoneIso8601) { 232 | timezoneList = $.map(timezoneList, function(val) { 233 | return val == '+0000' ? 'Z' : (val.substring(0, 3) + ':' + val.substring(3)); 234 | }); 235 | } 236 | tp_inst._defaults.timezoneList = timezoneList; 237 | } 238 | 239 | tp_inst.timezone = tp_inst._defaults.timezone; 240 | tp_inst.hour = tp_inst._defaults.hour; 241 | tp_inst.minute = tp_inst._defaults.minute; 242 | tp_inst.second = tp_inst._defaults.second; 243 | tp_inst.millisec = tp_inst._defaults.millisec; 244 | tp_inst.ampm = ''; 245 | tp_inst.$input = $input; 246 | 247 | if (o.altField) { 248 | tp_inst.$altInput = $(o.altField).css({ 249 | cursor: 'pointer' 250 | }).focus(function() { 251 | $input.trigger("focus"); 252 | }); 253 | } 254 | 255 | if (tp_inst._defaults.minDate === 0 || tp_inst._defaults.minDateTime === 0) { 256 | tp_inst._defaults.minDate = new Date(); 257 | } 258 | if (tp_inst._defaults.maxDate === 0 || tp_inst._defaults.maxDateTime === 0) { 259 | tp_inst._defaults.maxDate = new Date(); 260 | } 261 | 262 | // datepicker needs minDate/maxDate, timepicker needs minDateTime/maxDateTime.. 263 | if (tp_inst._defaults.minDate !== undefined && tp_inst._defaults.minDate instanceof Date) { 264 | tp_inst._defaults.minDateTime = new Date(tp_inst._defaults.minDate.getTime()); 265 | } 266 | if (tp_inst._defaults.minDateTime !== undefined && tp_inst._defaults.minDateTime instanceof Date) { 267 | tp_inst._defaults.minDate = new Date(tp_inst._defaults.minDateTime.getTime()); 268 | } 269 | if (tp_inst._defaults.maxDate !== undefined && tp_inst._defaults.maxDate instanceof Date) { 270 | tp_inst._defaults.maxDateTime = new Date(tp_inst._defaults.maxDate.getTime()); 271 | } 272 | if (tp_inst._defaults.maxDateTime !== undefined && tp_inst._defaults.maxDateTime instanceof Date) { 273 | tp_inst._defaults.maxDate = new Date(tp_inst._defaults.maxDateTime.getTime()); 274 | } 275 | tp_inst.$input.bind('focus', function() { 276 | tp_inst._onFocus(); 277 | }); 278 | 279 | return tp_inst; 280 | }, 281 | 282 | /* 283 | * add our sliders to the calendar 284 | */ 285 | _addTimePicker: function(dp_inst) { 286 | var currDT = (this.$altInput && this._defaults.altFieldTimeOnly) ? this.$input.val() + ' ' + this.$altInput.val() : this.$input.val(); 287 | 288 | this.timeDefined = this._parseTime(currDT); 289 | this._limitMinMaxDateTime(dp_inst, false); 290 | this._injectTimePicker(); 291 | }, 292 | 293 | /* 294 | * parse the time string from input value or _setTime 295 | */ 296 | _parseTime: function(timeString, withDate) { 297 | if (!this.inst) { 298 | this.inst = $.datepicker._getInst(this.$input[0]); 299 | } 300 | 301 | if (withDate || !this._defaults.timeOnly) { 302 | var dp_dateFormat = $.datepicker._get(this.inst, 'dateFormat'); 303 | try { 304 | var parseRes = parseDateTimeInternal(dp_dateFormat, this._defaults.timeFormat, timeString, $.datepicker._getFormatConfig(this.inst), this._defaults); 305 | if (!parseRes.timeObj) { 306 | return false; 307 | } 308 | $.extend(this, parseRes.timeObj); 309 | } catch (err) { 310 | $.datepicker.log("Error parsing the date/time string: " + err + 311 | "\ndate/time string = " + timeString + 312 | "\ntimeFormat = " + this._defaults.timeFormat + 313 | "\ndateFormat = " + dp_dateFormat); 314 | return false; 315 | } 316 | return true; 317 | } else { 318 | var timeObj = $.datepicker.parseTime(this._defaults.timeFormat, timeString, this._defaults); 319 | if (!timeObj) { 320 | return false; 321 | } 322 | $.extend(this, timeObj); 323 | return true; 324 | } 325 | }, 326 | 327 | /* 328 | * generate and inject html for timepicker into ui datepicker 329 | */ 330 | _injectTimePicker: function() { 331 | var $dp = this.inst.dpDiv, 332 | o = this.inst.settings, 333 | tp_inst = this, 334 | litem = '', 335 | uitem = '', 336 | max = {}, 337 | gridSize = {}, 338 | size = null; 339 | 340 | // Prevent displaying twice 341 | if ($dp.find("div.ui-timepicker-div").length === 0 && o.showTimepicker) { 342 | var noDisplay = ' style="display:none;"', 343 | html = '
' + '
' + o.timeText + '
' + 344 | '
'; 345 | 346 | // Create the markup 347 | for(var i=0,l=this.units.length; i' + o[litem +'Text'] + '' + 357 | '
'; 358 | 359 | if (o['show'+uitem] && o[litem+'Grid'] > 0) { 360 | html += '
'; 361 | 362 | if(litem == 'hour'){ 363 | for (var h = o[litem+'Min']; h <= max[litem]; h += parseInt(o[litem+'Grid'], 10)) { 364 | gridSize[litem]++; 365 | var tmph = $.datepicker.formatTime(useAmpm(o.pickerTimeFormat || o.timeFormat)? 'hht':'HH', {hour:h}, o); 366 | html += ''; 367 | } 368 | } 369 | else{ 370 | for (var m = o[litem+'Min']; m <= max[litem]; m += parseInt(o[litem+'Grid'], 10)) { 371 | gridSize[litem]++; 372 | html += ''; 373 | } 374 | } 375 | 376 | html += '
' + tmph + '' + ((m < 10) ? '0' : '') + m + '
'; 377 | } 378 | html += '
'; 379 | } 380 | 381 | // Timezone 382 | html += '
' + o.timezoneText + '
'; 383 | html += '
'; 384 | 385 | // Create the elements from string 386 | html += '
'; 387 | var $tp = $(html); 388 | 389 | // if we only want time picker... 390 | if (o.timeOnly === true) { 391 | $tp.prepend('
' + '
' + o.timeOnlyTitle + '
' + '
'); 392 | $dp.find('.ui-datepicker-header, .ui-datepicker-calendar').hide(); 393 | } 394 | 395 | // add sliders, adjust grids, add events 396 | for(var i=0,l=tp_inst.units.length; i 0) { 405 | size = 100 * gridSize[litem] * o[litem+'Grid'] / (max[litem] - o[litem+'Min']); 406 | $tp.find('.ui_tpicker_'+litem+' table').css({ 407 | width: size + "%", 408 | marginLeft: o.isRTL? '0' : ((size / (-2 * gridSize[litem])) + "%"), 409 | marginRight: o.isRTL? ((size / (-2 * gridSize[litem])) + "%") : '0', 410 | borderCollapse: 'collapse' 411 | }).find("td").click(function(e){ 412 | var $t = $(this), 413 | h = $t.html(), 414 | n = parseInt(h.replace(/[^0-9]/g),10), 415 | ap = h.replace(/[^apm]/ig), 416 | f = $t.data('for'); // loses scope, so we use data-for 417 | 418 | if(f == 'hour'){ 419 | if(ap.indexOf('p') !== -1 && n < 12){ 420 | n += 12; 421 | } 422 | else{ 423 | if(ap.indexOf('a') !== -1 && n === 12){ 424 | n = 0; 425 | } 426 | } 427 | } 428 | 429 | tp_inst.control.value(tp_inst, tp_inst[f+'_slider'], litem, n); 430 | 431 | tp_inst._onTimeChange(); 432 | tp_inst._onSelectHandler(); 433 | }) 434 | .css({ 435 | cursor: 'pointer', 436 | width: (100 / gridSize[litem]) + '%', 437 | textAlign: 'center', 438 | overflow: 'hidden' 439 | }); 440 | } // end if grid > 0 441 | } // end for loop 442 | 443 | // Add timezone options 444 | this.timezone_select = $tp.find('.ui_tpicker_timezone').append('').find("select"); 445 | $.fn.append.apply(this.timezone_select, 446 | $.map(o.timezoneList, function(val, idx) { 447 | return $("