Salut, j'ai ajouté un champ date et time à mon formulaire et ça marche très bien.J'ai donc ajouté un deuxième champ date et heure de la même façon mais ça ne marche pas

<div class ="col-md-5">
                <legend>Début</legend>
            <div class="col-md-5">
                <label>Date:</label>
                    <div id="dp-ex-2" class="input-group date">
                        <?php echo $this->Form->input('Discount.start_date', array('div' => false, 'class' => 'form-control parsley-validated' ,'type' => 'text', 'label' =>false,'data-required'=> true,'id' => 'date-2')); ?>
                     <span class="input-group-addon"><i class="fa fa-calendar"></i></span>
                    </div>
            </div>
            <div class="col-md-5">
                    <label>Heure:</label>
                <div class="input-group bootstrap-timepicker">
                    <div class="bootstrap-timepicker-widget dropdown-menu">
                        <table>
                            <tbody>
                                <tr>
                                    <td><a href="#" data-action="incrementHour"><i class="fa fa-chevron-up"></i></a></td>
                                    <td class="separator"> </td>
                                    <td><a href="#" data-action="incrementMinute"><i class="fa fa-chevron-up"></i></a></td><td class="separator"> </td>
                                    <td class="meridian-column"><a href="#" data-action="toggleMeridian"><i class="fa fa-chevron-up"></i></a></td>
                                </tr>
                                <tr>
                                    <td><input type="text" name="hour" class="bootstrap-timepicker-hour" maxlength="2"></td> 
                                    <td class="separator">:</td><td><input type="text" name="minute" class="bootstrap-timepicker-minute" maxlength="2"></td> 
                                    <td class="separator"> </td>
                                    <td><input type="text" name="meridian" class="bootstrap-timepicker-meridian" maxlength="2"></td>
                                </tr>
                                <tr>
                                    <td><a href="#" data-action="decrementHour"><i class="fa fa-chevron-down"></i></a></td><td class="separator"></td>
                                    <td><a href="#" data-action="decrementMinute"><i class="fa fa-chevron-down"></i></a></td>
                                    <td class="separator"> </td><td><a href="#" data-action="toggleMeridian"><i class="fa fa-chevron-down"></i></a></td>
                                </tr>
                            </tbody>
                        </table>
                    </div>
                    <?php echo $this->Form->input('Discount.start_time', array('div' => false, 'class' => 'form-control','type' => 'text','id' => 'tp-ex-1','label' =>false,'id' => 'tp-ex-1')); ?> <!-- balise php -->
                    <span class="input-group-addon"><i class="fa fa-clock-o"></i></span>
                </div>
                </div>
            </div>

==MERCI

3 réponses


voici le fichier bootstrap-datepicker.js [code] /* ========================================================= * bootstrap-datepicker.js * http://www.eyecon.ro/bootstrap-datepicker * ========================================================= * Copyright 2012 Stefan Petre * Improvements by Andrew Rowls * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ========================================================= */ (function( $ ) { function UTCDate(){ return new Date(Date.UTC.apply(Date, arguments)); } function UTCToday(){ var today = new Date(); return UTCDate(today.getUTCFullYear(), today.getUTCMonth(), today.getUTCDate()); } // Picker object var Datepicker = function(element, options) { var that = this; this._process_options(options); this.element = $(element); this.isInline = false; this.isInput = this.element.is('input'); this.component = this.element.is('.date') ? this.element.find('.add-on, .btn, .input-group-addon') : false; this.hasInput = this.component && this.element.find('input').length; if(this.component && this.component.length === 0) this.component = false; this.picker = $(DPGlobal.template); this._buildEvents(); this._attachEvents(); if(this.isInline) { this.picker.addClass('datepicker-inline').appendTo(this.element); } else { this.picker.addClass('datepicker-dropdown dropdown-menu'); } if (this.o.rtl){ this.picker.addClass('datepicker-rtl'); this.picker.find('.prev i, .next i') .toggleClass('glyphicon glyphicon-arrow-left glyphicon-arrow-right'); } this.viewMode = this.o.startView; if (this.o.calendarWeeks) this.picker.find('tfoot th.today') .attr('colspan', function(i, val){ return parseInt(val) + 1; }); this._allow_update = false; this.setStartDate(this.o.startDate); this.setEndDate(this.o.endDate); this.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled); this.fillDow(); this.fillMonths(); this._allow_update = true; this.update(); this.showMode(); if(this.isInline) { this.show(); } }; Datepicker.prototype = { constructor: Datepicker, _process_options: function(opts){ // Store raw options for reference this._o = $.extend({}, this._o, opts); // Processed options var o = this.o = $.extend({}, this._o); // Check if "de-DE" style date is available, if not language should // fallback to 2 letter code eg "de" var lang = o.language; if (!dates[lang]) { lang = lang.split('-')[0]; if (!dates[lang]) lang = defaults.language; } o.language = lang; switch(o.startView){ case 2: case 'decade': o.startView = 2; break; case 1: case 'year': o.startView = 1; break; default: o.startView = 0; } switch (o.minViewMode) { case 1: case 'months': o.minViewMode = 1; break; case 2: case 'years': o.minViewMode = 2; break; default: o.minViewMode = 0; } o.startView = Math.max(o.startView, o.minViewMode); o.weekStart %= 7; o.weekEnd = ((o.weekStart + 6) % 7); var format = DPGlobal.parseFormat(o.format) if (o.startDate !== -Infinity) { o.startDate = DPGlobal.parseDate(o.startDate, format, o.language); } if (o.endDate !== Infinity) { o.endDate = DPGlobal.parseDate(o.endDate, format, o.language); } o.daysOfWeekDisabled = o.daysOfWeekDisabled||[]; if (!$.isArray(o.daysOfWeekDisabled)) o.daysOfWeekDisabled = o.daysOfWeekDisabled.split(/[,\s]*/); o.daysOfWeekDisabled = $.map(o.daysOfWeekDisabled, function (d) { return parseInt(d, 10); }); }, _events: [], _secondaryEvents: [], _applyEvents: function(evs){ for (var i=0, el, ev; i<evs.length i el="evs[0];" ev="evs[1];" el.on _unapplyevents: function for el.off _buildevents: if single input this._events="[" focus: this keyup: keydown: else this.hasinput component: button components that are not readonly allow keyboard nav click: inline datepicker this.isinline="true;" this._secondaryevents="[" resize: mousedown: clicked outside the hide it this.element.is this.element.find this.picker.is this.picker.find this.hide _attachevents: this._detachevents this._applyevents _detachevents: this._unapplyevents _attachsecondaryevents: this._detachsecondaryevents _detachsecondaryevents: _trigger: altdate var date="altdate" this.date local_date="new" this.element.trigger type: event date: format: format="altformat" this.o.format return dpglobal.formatdate this.o.language show: this.picker.appendto this.picker.show this.height="this.component" this.component.outerheight : this.element.outerheight this.place this._attachsecondaryevents e.preventdefault this._trigger hide: this.picker.hide this.viewmode="this.o.startView;" this.showmode this.o.forceparse this.isinput this.element.val this.setvalue remove: this.picker.remove delete this.element.data getdate: d="this.getUTCDate();" new getutcdate: setdate: this.setutcdate setutcdate: setvalue: formatted="this.getFormattedDate();" getformatteddate: undefined setstartdate: this._process_options startdate this.update this.updatenavarrows setenddate: enddate setdaysofweekdisabled: daysofweekdisabled place: zindex="parseInt(this.element.parents().filter(function()" offset="this.component" this.component.parent this.element.offset height="this.component" this.picker.css top: offset.top left: offset.left zindex: _allow_update: true update: fromargs="false;" arguments.length arguments instanceof this.o.startdate this.viewdate="new"> this.o.endDate) {
this.viewDate = new Date(this.o.endDate);
} else {
this.viewDate = new Date(this.date);
}
this.fill();
},

    fillDow: function(){
        var dowCnt = this.o.weekStart,
        html = '<tr>';
        if(this.o.calendarWeeks){
            var cell = '<th class="cw"> </th>';
            html += cell;
            this.picker.find('.datepicker-days thead tr:first-child').prepend(cell);
        }
        while (dowCnt '+dates[this.o.language].daysMin[(dowCnt++)%7]+'';
        }
        html += '</tr>';
        this.picker.find('.datepicker-days thead').append(html);
    },

    fillMonths: function(){
        var html = '',
        i = 0;
        while (i '+dates[this.o.language].monthsShort[i++]+'';
        }
        this.picker.find('.datepicker-months td').html(html);
    },

    setRange: function(range){
        if (!range || !range.length)
            delete this.range;
        else
            this.range = $.map(range, function(d){ return d.valueOf(); });
        this.fill();
    },

    getClassNames: function(date){
        var cls = [],
            year = this.viewDate.getUTCFullYear(),
            month = this.viewDate.getUTCMonth(),
            currentDate = this.date.valueOf(),
            today = new Date();
        if (date.getUTCFullYear() year || (date.getUTCFullYear() == year &amp;&amp; date.getUTCMonth() &gt; month)) {
            cls.push('new');
        }
        // Compare internal UTC date with local today, not UTC today
        if (this.o.todayHighlight &amp;&amp;
            date.getUTCFullYear() == today.getFullYear() &amp;&amp;
            date.getUTCMonth() == today.getMonth() &amp;&amp;
            date.getUTCDate() == today.getDate()) {
            cls.push('today');
        }
        if (currentDate &amp;&amp; date.valueOf() == currentDate) {
            cls.push('active');
        }
        if (date.valueOf() this.o.endDate ||
            $.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1) {
            cls.push('disabled');
        }
        if (this.range){
            if (date &gt; this.range[0] &amp;&amp; date ');
                if(this.o.calendarWeeks){
                    // ISO 8601: First week contains first thursday.
                    // ISO also states week starts on Monday, but we can be more abstract here.
                    var
                        // Start of current week: based on weekstart/current date
                        ws = new Date(+prevMonth + (this.o.weekStart - prevMonth.getUTCDay() - 7) % 7 * 864e5),
                        // Thursday of this week
                        th = new Date(+ws + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),
                        // First Thursday of year, year from thursday
                        yth = new Date(+(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay())%7*864e5),
                        // Calendar week: ms between thursdays, div ms per day, div 7 days
                        calWeek = (th - yth) / 864e5 / 7 + 1;
                    html.push('<td class="cw">'+ calWeek +'</td>');

                }
            }
            clsName = this.getClassNames(prevMonth);
            clsName.push('day');

            var before = this.o.beforeShowDay(prevMonth);
            if (before === undefined)
                before = {};
            else if (typeof(before) === 'boolean')
                before = {enabled: before};
            else if (typeof(before) === 'string')
                before = {classes: before};
            if (before.enabled === false)
                clsName.push('disabled');
            if (before.classes)
                clsName = clsName.concat(before.classes.split(/\s+/));
            if (before.tooltip)
                tooltip = before.tooltip;

            clsName = $.unique(clsName);
            html.push('<td class="'+clsName.join(' ')+'" title="'+tooltip+'" :>'+prevMonth.getUTCDate() + '</td>');
            if (prevMonth.getUTCDay() == this.o.weekEnd) {
                html.push('');
            }
            prevMonth.setUTCDate(prevMonth.getUTCDate()+1);
        }
        this.picker.find('.datepicker-days tbody').empty().append(html.join(''));
        var currentYear = this.date &amp;&amp; this.date.getUTCFullYear();

        var months = this.picker.find('.datepicker-months')
                    .find('th:eq(1)')
                        .text(year)
                        .end()
                    .find('span').removeClass('active');
        if (currentYear &amp;&amp; currentYear == year) {
            months.eq(this.date.getUTCMonth()).addClass('active');
        }
        if (year endYear) {
            months.addClass('disabled');
        }
        if (year == startYear) {
            months.slice(0, startMonth).addClass('disabled');
        }
        if (year == endYear) {
            months.slice(endMonth+1).addClass('disabled');
        }

        html = '';
        year = parseInt(year/10, 10) * 10;
        var yearCont = this.picker.find('.datepicker-years')
                            .find('th:eq(1)')
                                .text(year + '-' + (year + 9))
                                .end()
                            .find('td');
        year -= 1;
        for (var i = -1; i endYear ? ' disabled' : '')+'"&gt;'+year+'';
            year += 1;
        }
        yearCont.html(html);
    },

    updateNavArrows: function() {
        if (!this._allow_update) return;

        var d = new Date(this.viewDate),
            year = d.getUTCFullYear(),
            month = d.getUTCMonth();
        switch (this.viewMode) {
            case 0:
                if (this.o.startDate !== -Infinity &amp;&amp; year = this.o.endDate.getUTCFullYear() &amp;&amp; month &gt;= this.o.endDate.getUTCMonth()) {
                    this.picker.find('.next').css({visibility: 'hidden'});
                } else {
                    this.picker.find('.next').css({visibility: 'visible'});
                }
                break;
            case 1:
            case 2:
                if (this.o.startDate !== -Infinity &amp;&amp; year = this.o.endDate.getUTCFullYear()) {
                    this.picker.find('.next').css({visibility: 'hidden'});
                } else {
                    this.picker.find('.next').css({visibility: 'visible'});
                }
                break;
        }
    },

    click: function(e) {
        e.preventDefault();
        var target = $(e.target).closest('span, td, th');
        if (target.length == 1) {
            switch(target[0].nodeName.toLowerCase()) {
                case 'th':
                    switch(target[0].className) {
                        case 'datepicker-switch':
                            this.showMode(1);
                            break;
                        case 'prev':
                        case 'next':
                            var dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className == 'prev' ? -1 : 1);
                            switch(this.viewMode){
                                case 0:
                                    this.viewDate = this.moveMonth(this.viewDate, dir);
                                    break;
                                case 1:
                                case 2:
                                    this.viewDate = this.moveYear(this.viewDate, dir);
                                    break;
                            }
                            this.fill();
                            break;
                        case 'today':
                            var date = new Date();
                            date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);

                            this.showMode(-2);
                            var which = this.o.todayBtn == 'linked' ? null : 'view';
                            this._setDate(date, which);
                            break;
                        case 'clear':
                            var element;
                            if (this.isInput)
                                element = this.element;
                            else if (this.component)
                                element = this.element.find('input');
                            if (element)
                                element.val("").change();
                            this._trigger('changeDate');
                            this.update();
                            if (this.o.autoclose)
                                this.hide();
                            break;
                    }
                    break;
                case 'span':
                    if (!target.is('.disabled')) {
                        this.viewDate.setUTCDate(1);
                        if (target.is('.month')) {
                            var day = 1;
                            var month = target.parent().find('span').index(target);
                            var year = this.viewDate.getUTCFullYear();
                            this.viewDate.setUTCMonth(month);
                            this._trigger('changeMonth', this.viewDate);
                            if (this.o.minViewMode === 1) {
                                this._setDate(UTCDate(year, month, day,0,0,0,0));
                            }
                        } else {
                            var year = parseInt(target.text(), 10)||0;
                            var day = 1;
                            var month = 0;
                            this.viewDate.setUTCFullYear(year);
                            this._trigger('changeYear', this.viewDate);
                            if (this.o.minViewMode === 2) {
                                this._setDate(UTCDate(year, month, day,0,0,0,0));
                            }
                        }
                        this.showMode(-1);
                        this.fill();
                    }
                    break;
                case 'td':
                    if (target.is('.day') &amp;&amp; !target.is('.disabled')){
                        var day = parseInt(target.text(), 10)||1;
                        var year = this.viewDate.getUTCFullYear(),
                            month = this.viewDate.getUTCMonth();
                        if (target.is('.old')) {
                            if (month === 0) {
                                month = 11;
                                year -= 1;
                            } else {
                                month -= 1;
                            }
                        } else if (target.is('.new')) {
                            if (month == 11) {
                                month = 0;
                                year += 1;
                            } else {
                                month += 1;
                            }
                        }
                        this._setDate(UTCDate(year, month, day,0,0,0,0));
                    }
                    break;
            }
        }
    },

    _setDate: function(date, which){
        if (!which || which == 'date')
            this.date = new Date(date);
        if (!which || which == 'view')
            this.viewDate = new Date(date);
        this.fill();
        this.setValue();
        this._trigger('changeDate');
        var element;
        if (this.isInput) {
            element = this.element;
        } else if (this.component){
            element = this.element.find('input');
        }
        if (element) {
            element.change();
            if (this.o.autoclose &amp;&amp; (!which || which == 'date')) {
                this.hide();
            }
        }
    },

    moveMonth: function(date, dir){
        if (!dir) return date;
        var new_date = new Date(date.valueOf()),
            day = new_date.getUTCDate(),
            month = new_date.getUTCMonth(),
            mag = Math.abs(dir),
            new_month, test;
        dir = dir &gt; 0 ? 1 : -1;
        if (mag == 1){
            test = dir == -1
                // If going back one month, make sure month is not current month
                // (eg, Mar 31 -&gt; Feb 31 == Feb 28, not Mar 02)
                ? function(){ return new_date.getUTCMonth() == month; }
                // If going forward one month, make sure month is as expected
                // (eg, Jan 31 -&gt; Feb 31 == Feb 28, not Mar 02)
                : function(){ return new_date.getUTCMonth() != new_month; };
            new_month = month + dir;
            new_date.setUTCMonth(new_month);
            // Dec -&gt; Jan (12) or Jan -&gt; Dec (-1) -- limit expected date to 0-11
            if (new_month 11)
                new_month = (new_month + 12) % 12;
        } else {
            // For magnitudes &gt;1, move one month at a time...
            for (var i=0; i<mag i ...which might decrease the day jan to feb etc new_date="this.moveMonth(new_date," dir ...then reset keeping it in new month new_month="new_date.getUTCMonth();" new_date.setutcdate test="function(){" return new_date.getutcmonth common date-resetting loop if date is beyond end of make while new_date.setutcmonth moveyear: function this.movemonth datewithinrange:>= this.o.startDate &amp;&amp; date div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).show();
        this.picker.find('&gt;div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).css('display', 'block');
        this.updateNavArrows();
    }
};

var DateRangePicker = function(element, options){
    this.element = $(element);
    this.inputs = $.map(options.inputs, function(i){ return i.jquery ? i[0] : i; });
    delete options.inputs;

    $(this.inputs)
        .datepicker(options)
        .bind('changeDate', $.proxy(this.dateUpdated, this));

    this.pickers = $.map(this.inputs, function(i){ return $(i).data('datepicker'); });
    this.updateDates();
};
DateRangePicker.prototype = {
    updateDates: function(){
        this.dates = $.map(this.pickers, function(i){ return i.date; });
        this.updateRanges();
    },
    updateRanges: function(){
        var range = $.map(this.dates, function(d){ return d.valueOf(); });
        $.each(this.pickers, function(i, p){
            p.setRange(range);
        });
    },
    dateUpdated: function(e){
        var dp = $(e.target).data('datepicker'),
            new_date = dp.getUTCDate(),
            i = $.inArray(e.target, this.inputs),
            l = this.inputs.length;
        if (i == -1) return;

        if (new_date =0 &amp;&amp; new_date this.dates*){
            // Date being moved later/right
            while (i<l new_date> this.dates*){
                this.pickers[i++].setUTCDate(new_date);
            }
        }
        this.updateDates();
    },
    remove: function(){
        $.map(this.pickers, function(p){ p.remove(); });
        delete this.element.data().datepicker;
    }
};

function opts_from_el(el, prefix){
    // Derive options from element data-attrs
    var data = $(el).data(),
        out = {}, inkey,
        replace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])'),
        prefix = new RegExp('^' + prefix.toLowerCase());
    for (var key in data)
        if (prefix.test(key)){
            inkey = key.replace(replace, function(_,a){ return a.toLowerCase(); });
            out[inkey] = data[key];
        }
    return out;
}

function opts_from_locale(lang){
    // Derive options from locale plugins
    var out = {};
    // Check if "de-DE" style date is available, if not language should
    // fallback to 2 letter code eg "de"
    if (!dates[lang]) {
        lang = lang.split('-')[0]
        if (!dates[lang])
            return;
    }
    var d = dates[lang];
    $.each(locale_opts, function(i,k){
        if (k in d)
            out[k] = d[k];
    });
    return out;
}

var old = $.fn.datepicker;
$.fn.datepicker = function ( option ) {
    var args = Array.apply(null, arguments);
    args.shift();
    var internal_return,
        this_return;
    this.each(function () {
        var $this = $(this),
            data = $this.data('datepicker'),
            options = typeof option == 'object' &amp;&amp; option;
        if (!data) {
            var elopts = opts_from_el(this, 'date'),
                // Preliminary otions
                xopts = $.extend({}, defaults, elopts, options),
                locopts = opts_from_locale(xopts.language),
                // Options priority: js args, data-attrs, locales, defaults
                opts = $.extend({}, defaults, locopts, elopts, options);
            if ($this.is('.input-daterange') || opts.inputs){
                var ropts = {
                    inputs: opts.inputs || $this.find('input').toArray()
                };
                $this.data('datepicker', (data = new DateRangePicker(this, $.extend(opts, ropts))));
            }
            else{
                $this.data('datepicker', (data = new Datepicker(this, opts)));
            }
        }
        if (typeof option == 'string' &amp;&amp; typeof data[option] == 'function') {
            internal_return = data[option].apply(data, args);
            if (internal_return !== undefined)
                return false;
        }
    });
    if (internal_return !== undefined)
        return internal_return;
    else
        return this;
};

var defaults = $.fn.datepicker.defaults = {
    autoclose: false,
    beforeShowDay: $.noop,
    calendarWeeks: false,
    clearBtn: false,
    daysOfWeekDisabled: [],
    endDate: Infinity,
    forceParse: true,
    format: 'mm/dd/yyyy',
    keyboardNavigation: true,
    language: 'en',
    minViewMode: 0,
    rtl: false,
    startDate: -Infinity,
    startView: 0,
    todayBtn: false,
    todayHighlight: false,
    weekStart: 0
};
var locale_opts = $.fn.datepicker.locale_opts = [
    'format',
    'rtl',
    'weekStart'
];
$.fn.datepicker.Constructor = Datepicker;
var dates = $.fn.datepicker.dates = {
    en: {
        days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
        daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
        daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"],
        months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
        monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
        today: "Today",
        clear: "Clear"
    }
};

var DPGlobal = {
    modes: [
        {
            clsName: 'days',
            navFnc: 'Month',
            navStep: 1
        },
        {
            clsName: 'months',
            navFnc: 'FullYear',
            navStep: 1
        },
        {
            clsName: 'years',
            navFnc: 'FullYear',
            navStep: 10
    }],
    isLeapYear: function (year) {
        return (((year % 4 === 0) &amp;&amp; (year % 100 !== 0)) || (year % 400 === 0));
    },
    getDaysInMonth: function (year, month) {
        return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
    },
    validParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,
    nonpunctuation: /[^ -\/:-@\[\u3400-\u9fff-`{-~\t\n\r]+/g,
    parseFormat: function(format){
        // IE treats \0 as a string end in inputs (truncating the value),
        // so it's a bad format delimiter, anyway
        var separators = format.replace(this.validParts, '\0').split('\0'),
            parts = format.match(this.validParts);
        if (!separators || !separators.length || !parts || parts.length === 0){
            throw new Error("Invalid date format.");
        }
        return {separators: separators, parts: parts};
    },
    parseDate: function(date, format, language) {
        if (date instanceof Date) return date;
        if (typeof format === 'string')
            format = DPGlobal.parseFormat(format);
        if (/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(date)) {
            var part_re = /([\-+]\d+)([dmwy])/,
                parts = date.match(/([\-+]\d+)([dmwy])/g),
                part, dir;
            date = new Date();
            for (var i=0; i<parts.length i part="part_re.exec(parts*);" dir="parseInt(part[1]);" switch case date.setutcdate break date="Datepicker.prototype.moveMonth.call(Datepicker.prototype," return utcdate date.getutcmonth date.getutcdate var parts="date" date.match parsed="{}," setters_order="['yyyy'," setters_map="{" yyyy: function d.setutcfullyear yy: m: if d v while d.setutcmonth d.setutcdate d: val filtered date.getmonth date.getdate fparts="format.parts.slice();" remove noop fparts.length process remainder for cnt="fparts.length;" m="this.slice(0," p="parts*.slice(0," m.length dates _date s in formatdate: format language dd: mm: date.getutcfullyear val.dd="(val.d" : val.d val.mm="(val.m" val.m seps="$.extend([]," format.separators date.push date.join headtemplate:>'+
                        '<tr>'+
                            '<th class="prev"><i class="fa fa-arrow-left"></i></th>'+
                            '<th colspan="5" class="datepicker-switch"></th>'+
                            '<th class="next"><i class="fa fa-arrow-right"></i></th>'+
                        '</tr>'+
                    '',
    contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>',
    footTemplate: '<tfoot>

<tr><th colspan="7" class="today"></th></tr>
<tr><th colspan="7" class="clear"></th></tr>
</tfoot>'
};
DPGlobal.template = '<div class="datepicker">'+
'<div class="datepicker-days">'+
'<table class=" table-condensed">'+
DPGlobal.headTemplate+
'<tbody></tbody>'+
DPGlobal.footTemplate+
'</table>'+
'</div>'+
'<div class="datepicker-months">'+
'<table class="table-condensed">'+
DPGlobal.headTemplate+
DPGlobal.contTemplate+
DPGlobal.footTemplate+
'</table>'+
'</div>'+
'<div class="datepicker-years">'+
'<table class="table-condensed">'+
DPGlobal.headTemplate+
DPGlobal.contTemplate+
DPGlobal.footTemplate+
'</table>'+
'</div>'+
'</div>';

$.fn.datepicker.DPGlobal = DPGlobal;

/* DATEPICKER NO CONFLICT
* =================== */

$.fn.datepicker.noConflict = function(){
    $.fn.datepicker = old;
    return this;
};

/* DATEPICKER DATA-API
* ================== */

$(document).on(
    'focus.datepicker.data-api click.datepicker.data-api',
    '[data-provide="datepicker"]',
    function(e){
        var $this = $(this);
        if ($this.data('datepicker')) return;
        e.preventDefault();
        // component click requires us to explicitly show it
        $this.datepicker('show');
    }
);
$(function(){
    $('[data-provide="datepicker-inline"]').datepicker();
});

}( window.jQuery ));
[/code]</parts.length></l></mag></evs.length>

Il faut que tu penses à créer les différentes fonctions jQuery:

$(function() {
$('#dp-ex-2').datepicker();
$('.bootstrap-timepicker').datepicker();
}

De plus, il te manque la classe "date" dans la div de ton input pour les heures :

<label>Heure:</label>
        <div class="input-group bootstrap-timepicker date">
        ....
        </div>

c'est une timepicker c pour l'heure pas la date. J'ai copié le code html du template. Pou les fonctions jQuery j les ajoute où ? et elles servent à quoi exactement?

==MERCI