!function (c) { function f() { return new Date(Date.UTC.apply(Date, arguments)) } function a() { var g = new Date(); return f(g.getUTCFullYear(), g.getUTCMonth(), g.getUTCDate(), g.getUTCHours(), g.getUTCMinutes(), g.getUTCSeconds(), 0) } var e = function (i, h) { var k = this; this.element = c(i); this.container = h.container || "body"; this.language = h.language || this.element.data("date-language") || "en"; this.language = this.language in d ? this.language : "en"; this.isRTL = d[this.language].rtl || false; this.formatType = h.formatType || this.element.data("format-type") || "standard"; this.format = b.parseFormat(h.format || this.element.data("date-format") || d[this.language].format || b.getDefaultFormat(this.formatType, "input"), this.formatType); this.isInline = false; this.isVisible = false; this.isInput = this.element.is("input"); this.fontAwesome = h.fontAwesome || this.element.data("font-awesome") || false; this.bootcssVer = h.bootcssVer || (this.isInput ? (this.element.is(".form-control") ? 3 : 2) : (this.bootcssVer = this.element.is(".input-group") ? 3 : 2)); this.component = this.element.is(".date") ? (this.bootcssVer == 3 ? this.element.find(".input-group-addon .glyphicon-th, .input-group-addon .glyphicon-time, .input-group-addon .glyphicon-calendar .fa-calendar .fa-clock-o").parent() : this.element.find(".add-on .icon-th, .add-on .icon-time, .add-on .icon-calendar .fa-calendar .fa-clock-o").parent()) : false; this.componentReset = this.element.is(".date") ? (this.bootcssVer == 3 ? this.element.find(".input-group-addon .glyphicon-remove .fa-times").parent() : this.element.find(".add-on .icon-remove .fa-times").parent()) : false; this.hasInput = this.component && this.element.find("input").length; if (this.component && this.component.length === 0) { this.component = false } this.linkField = h.linkField || this.element.data("link-field") || false; this.linkFormat = b.parseFormat(h.linkFormat || this.element.data("link-format") || b.getDefaultFormat(this.formatType, "link"), this.formatType); this.minuteStep = h.minuteStep || this.element.data("minute-step") || 5; this.pickerPosition = h.pickerPosition || this.element.data("picker-position") || "bottom-right"; this.showMeridian = h.showMeridian || this.element.data("show-meridian") || false; this.initialDate = h.initialDate || new Date(); this.icons = { leftArrow: this.fontAwesome ? "fa-arrow-left" : (this.bootcssVer === 3 ? "glyphicon-arrow-left" : "icon-arrow-left"), rightArrow: this.fontAwesome ? "fa-arrow-right" : (this.bootcssVer === 3 ? "glyphicon-arrow-right" : "icon-arrow-right") }; this.icontype = this.fontAwesome ? "fa" : "glyphicon"; this._attachEvents(); this.formatViewType = "datetime"; if ("formatViewType" in h) { this.formatViewType = h.formatViewType } else { if ("formatViewType" in this.element.data()) { this.formatViewType = this.element.data("formatViewType") } } this.minView = 0; if ("minView" in h) { this.minView = h.minView } else { if ("minView" in this.element.data()) { this.minView = this.element.data("min-view") } } this.minView = b.convertViewMode(this.minView); this.maxView = b.modes.length - 1; if ("maxView" in h) { this.maxView = h.maxView } else { if ("maxView" in this.element.data()) { this.maxView = this.element.data("max-view") } } this.maxView = b.convertViewMode(this.maxView); this.wheelViewModeNavigation = false; if ("wheelViewModeNavigation" in h) { this.wheelViewModeNavigation = h.wheelViewModeNavigation } else { if ("wheelViewModeNavigation" in this.element.data()) { this.wheelViewModeNavigation = this.element.data("view-mode-wheel-navigation") } } this.wheelViewModeNavigationInverseDirection = false; if ("wheelViewModeNavigationInverseDirection" in h) { this.wheelViewModeNavigationInverseDirection = h.wheelViewModeNavigationInverseDirection } else { if ("wheelViewModeNavigationInverseDirection" in this.element.data()) { this.wheelViewModeNavigationInverseDirection = this.element.data("view-mode-wheel-navigation-inverse-dir") } } this.wheelViewModeNavigationDelay = 100; if ("wheelViewModeNavigationDelay" in h) { this.wheelViewModeNavigationDelay = h.wheelViewModeNavigationDelay } else { if ("wheelViewModeNavigationDelay" in this.element.data()) { this.wheelViewModeNavigationDelay = this.element.data("view-mode-wheel-navigation-delay") } } this.startViewMode = 2; if ("startView" in h) { this.startViewMode = h.startView } else { if ("startView" in this.element.data()) { this.startViewMode = this.element.data("start-view") } } this.startViewMode = b.convertViewMode(this.startViewMode); this.viewMode = this.startViewMode; this.viewSelect = this.minView; if ("viewSelect" in h) { this.viewSelect = h.viewSelect } else { if ("viewSelect" in this.element.data()) { this.viewSelect = this.element.data("view-select") } } this.viewSelect = b.convertViewMode(this.viewSelect); this.forceParse = true; if ("forceParse" in h) { this.forceParse = h.forceParse } else { if ("dateForceParse" in this.element.data()) { this.forceParse = this.element.data("date-force-parse") } } var j = this.bootcssVer === 3 ? b.templateV3 : b.template; while (j.indexOf("{iconType}") !== -1) { j = j.replace("{iconType}", this.icontype) } while (j.indexOf("{leftArrow}") !== -1) { j = j.replace("{leftArrow}", this.icons.leftArrow) } while (j.indexOf("{rightArrow}") !== -1) { j = j.replace("{rightArrow}", this.icons.rightArrow) } this.picker = c(j).appendTo(this.isInline ? this.element : this.container).on({ click: c.proxy(this.click, this), mousedown: c.proxy(this.mousedown, this) }); if (this.wheelViewModeNavigation) { if (c.fn.mousewheel) { this.picker.on({mousewheel: c.proxy(this.mousewheel, this)}) } else { console.log("Mouse Wheel event is not supported. Please include the jQuery Mouse Wheel plugin before enabling this option") } } if (this.isInline) { this.picker.addClass("datetimepicker-inline") } else { this.picker.addClass("datetimepicker-dropdown-" + this.pickerPosition + " dropdown-menu") } if (this.isRTL) { this.picker.addClass("datetimepicker-rtl"); var g = this.bootcssVer === 3 ? ".prev span, .next span" : ".prev i, .next i"; this.picker.find(g).toggleClass(this.icons.leftArrow + " " + this.icons.rightArrow) } c(document).on("mousedown", function (l) { if (c(l.target).closest(".datetimepicker").length === 0) { k.hide() } }); this.autoclose = false; if ("autoclose" in h) { this.autoclose = h.autoclose } else { if ("dateAutoclose" in this.element.data()) { this.autoclose = this.element.data("date-autoclose") } } this.keyboardNavigation = true; if ("keyboardNavigation" in h) { this.keyboardNavigation = h.keyboardNavigation } else { if ("dateKeyboardNavigation" in this.element.data()) { this.keyboardNavigation = this.element.data("date-keyboard-navigation") } } this.todayBtn = (h.todayBtn || this.element.data("date-today-btn") || false); this.todayHighlight = (h.todayHighlight || this.element.data("date-today-highlight") || false); this.weekStart = ((h.weekStart || this.element.data("date-weekstart") || d[this.language].weekStart || 0) % 7); this.weekEnd = ((this.weekStart + 6) % 7); this.startDate = -Infinity; this.endDate = Infinity; this.daysOfWeekDisabled = []; this.setStartDate(h.startDate || this.element.data("date-startdate")); this.setEndDate(h.endDate || this.element.data("date-enddate")); this.setDaysOfWeekDisabled(h.daysOfWeekDisabled || this.element.data("date-days-of-week-disabled")); this.setMinutesDisabled(h.minutesDisabled || this.element.data("date-minute-disabled")); this.setHoursDisabled(h.hoursDisabled || this.element.data("date-hour-disabled")); this.fillDow(); this.fillMonths(); this.update(); this.showMode(); if (this.isInline) { this.show() } }; e.prototype = { constructor: e, _events: [], _attachEvents: function () { this._detachEvents(); if (this.isInput) { this._events = [[this.element, { focus: c.proxy(this.show, this), keyup: c.proxy(this.update, this), keydown: c.proxy(this.keydown, this) }]] } else { if (this.component && this.hasInput) { this._events = [[this.element.find("input"), { focus: c.proxy(this.show, this), keyup: c.proxy(this.update, this), keydown: c.proxy(this.keydown, this) }], [this.component, {click: c.proxy(this.show, this)}]]; if (this.componentReset) { this._events.push([this.componentReset, {click: c.proxy(this.reset, this)}]) } } else { if (this.element.is("div")) { this.isInline = true } else { this._events = [[this.element, {click: c.proxy(this.show, this)}]] } } } for (var g = 0, h, j; g < this._events.length; g++) { h = this._events[g][0]; j = this._events[g][1]; h.on(j) } }, _detachEvents: function () { for (var g = 0, h, j; g < this._events.length; g++) { h = this._events[g][0]; j = this._events[g][1]; h.off(j) } this._events = [] }, show: function (g) { this.picker.show(); this.height = this.component ? this.component.outerHeight() : this.element.outerHeight(); if (this.forceParse) { this.update() } this.place(); c(window).on("resize", c.proxy(this.place, this)); if (g) { g.stopPropagation(); g.preventDefault() } this.isVisible = true; this.element.trigger({type: "show", date: this.date}) }, hide: function (g) { if (!this.isVisible) { return } if (this.isInline) { return } this.picker.hide(); c(window).off("resize", this.place); this.viewMode = this.startViewMode; this.showMode(); if (!this.isInput) { c(document).off("mousedown", this.hide) } if (this.forceParse && (this.isInput && this.element.val() || this.hasInput && this.element.find("input").val())) { this.setValue() } this.isVisible = false; this.element.trigger({type: "hide", date: this.date}) }, remove: function () { this._detachEvents(); this.picker.remove(); delete this.picker; delete this.element.data().datetimepicker }, getDate: function () { var g = this.getUTCDate(); return new Date(g.getTime() + (g.getTimezoneOffset() * 60000)) }, getUTCDate: function () { return this.date }, setDate: function (g) { this.setUTCDate(new Date(g.getTime() - (g.getTimezoneOffset() * 60000))) }, setUTCDate: function (g) { if (g >= this.startDate && g <= this.endDate) { this.date = g; this.setValue(); this.viewDate = this.date; this.fill() } else { this.element.trigger({type: "outOfRange", date: g, startDate: this.startDate, endDate: this.endDate}) } }, setFormat: function (h) { this.format = b.parseFormat(h, this.formatType); var g; if (this.isInput) { g = this.element } else { if (this.component) { g = this.element.find("input") } } if (g && g.val()) { this.setValue() } }, setValue: function () { var g = this.getFormattedDate(); if (!this.isInput) { if (this.component) { this.element.find("input").val(g) } this.element.data("date", g) } else { this.element.val(g) } if (this.linkField) { c("#" + this.linkField).val(this.getFormattedDate(this.linkFormat)) } }, getFormattedDate: function (g) { if (g == undefined) { g = this.format } return b.formatDate(this.date, g, this.language, this.formatType) }, setStartDate: function (g) { this.startDate = g || -Infinity; if (this.startDate !== -Infinity) { this.startDate = b.parseDate(this.startDate, this.format, this.language, this.formatType) } this.update(); this.updateNavArrows() }, setEndDate: function (g) { this.endDate = g || Infinity; if (this.endDate !== Infinity) { this.endDate = b.parseDate(this.endDate, this.format, this.language, this.formatType) } this.update(); this.updateNavArrows() }, setDaysOfWeekDisabled: function (g) { this.daysOfWeekDisabled = g || []; if (!c.isArray(this.daysOfWeekDisabled)) { this.daysOfWeekDisabled = this.daysOfWeekDisabled.split(/,\s*/) } this.daysOfWeekDisabled = c.map(this.daysOfWeekDisabled, function (h) { return parseInt(h, 10) }); this.update(); this.updateNavArrows() }, setMinutesDisabled: function (g) { this.minutesDisabled = g || []; if (!c.isArray(this.minutesDisabled)) { this.minutesDisabled = this.minutesDisabled.split(/,\s*/) } this.minutesDisabled = c.map(this.minutesDisabled, function (h) { return parseInt(h, 10) }); this.update(); this.updateNavArrows() }, setHoursDisabled: function (g) { this.hoursDisabled = g || []; if (!c.isArray(this.hoursDisabled)) { this.hoursDisabled = this.hoursDisabled.split(/,\s*/) } this.hoursDisabled = c.map(this.hoursDisabled, function (h) { return parseInt(h, 10) }); this.update(); this.updateNavArrows() }, place: function () { if (this.isInline) { return } var g = 0; c("div").each(function () { var m = parseInt(c(this).css("zIndex"), 10); if (m > g) { g = m } }); var l = g + 10; var k, j, i, h; if (this.container instanceof c) { h = this.container.offset() } else { h = c(this.container).offset() } if (this.component) { k = this.component.offset(); i = k.left; if (this.pickerPosition == "bottom-left" || this.pickerPosition == "top-left") { i += this.component.outerWidth() - this.picker.outerWidth() } } else { k = this.element.offset(); i = k.left } if (i + 220 > document.body.clientWidth) { i = document.body.clientWidth - 220 } if (this.pickerPosition == "top-left" || this.pickerPosition == "top-right") { j = k.top - this.picker.outerHeight() } else { j = k.top + this.height } j = j - h.top; i = i - h.left; this.picker.css({top: j, left: i, zIndex: l}) }, update: function () { var g, h = false; if (arguments && arguments.length && (typeof arguments[0] === "string" || arguments[0] instanceof Date)) { g = arguments[0]; h = true } else { g = (this.isInput ? this.element.val() : this.element.find("input").val()) || this.element.data("date") || this.initialDate; if (typeof g == "string" || g instanceof String) { g = g.replace(/^\s+|\s+$/g, "") } } if (!g) { g = new Date(); h = false } this.date = b.parseDate(g, this.format, this.language, this.formatType); if (h) { this.setValue() } if (this.date < this.startDate) { this.viewDate = new Date(this.startDate) } else { if (this.date > this.endDate) { this.viewDate = new Date(this.endDate) } else { this.viewDate = new Date(this.date) } } this.fill() }, fillDow: function () { var g = this.weekStart, h = ""; while (g < this.weekStart + 7) { h += '' + d[this.language].daysMin[(g++) % 7] + "" } h += ""; this.picker.find(".datetimepicker-days thead").append(h) }, fillMonths: function () { var h = "", g = 0; while (g < 12) { h += '' + d[this.language].monthsShort[g++] + "" } this.picker.find(".datetimepicker-months td").html(h) }, fill: function () { if (this.date == null || this.viewDate == null) { return } var G = new Date(this.viewDate), s = G.getUTCFullYear(), H = G.getUTCMonth(), l = G.getUTCDate(), B = G.getUTCHours(), w = G.getUTCMinutes(), x = this.startDate !== -Infinity ? this.startDate.getUTCFullYear() : -Infinity, C = this.startDate !== -Infinity ? this.startDate.getUTCMonth() + 1 : -Infinity, n = this.endDate !== Infinity ? this.endDate.getUTCFullYear() : Infinity, y = this.endDate !== Infinity ? this.endDate.getUTCMonth() + 1 : Infinity, p = (new f(this.date.getUTCFullYear(), this.date.getUTCMonth(), this.date.getUTCDate())).valueOf(), F = new Date(); this.picker.find(".datetimepicker-days thead th:eq(1)").text(d[this.language].months[H] + " " + s); if (this.formatViewType == "time") { var D = B % 12 ? B % 12 : 12; var j = (D < 10 ? "0" : "") + D; var o = (w < 10 ? "0" : "") + w; var J = d[this.language].meridiem[B < 12 ? 0 : 1]; this.picker.find(".datetimepicker-hours thead th:eq(1)").text(j + ":" + o + " " + (J ? J.toUpperCase() : "")); this.picker.find(".datetimepicker-minutes thead th:eq(1)").text(j + ":" + o + " " + (J ? J.toUpperCase() : "")) } else { this.picker.find(".datetimepicker-hours thead th:eq(1)").text(l + " " + d[this.language].months[H] + " " + s); this.picker.find(".datetimepicker-minutes thead th:eq(1)").text(l + " " + d[this.language].months[H] + " " + s) } this.picker.find("tfoot th.today").text(d[this.language].today).toggle(this.todayBtn !== false); this.updateNavArrows(); this.fillMonths(); var K = f(s, H - 1, 28, 0, 0, 0, 0), A = b.getDaysInMonth(K.getUTCFullYear(), K.getUTCMonth()); K.setUTCDate(A); K.setUTCDate(A - (K.getUTCDay() - this.weekStart + 7) % 7); var g = new Date(K); g.setUTCDate(g.getUTCDate() + 42); g = g.valueOf(); var q = []; var t; while (K.valueOf() < g) { if (K.getUTCDay() == this.weekStart) { q.push("") } t = ""; if (K.getUTCFullYear() < s || (K.getUTCFullYear() == s && K.getUTCMonth() < H)) { t += " old" } else { if (K.getUTCFullYear() > s || (K.getUTCFullYear() == s && K.getUTCMonth() > H)) { t += " new" } } if (this.todayHighlight && K.getUTCFullYear() == F.getFullYear() && K.getUTCMonth() == F.getMonth() && K.getUTCDate() == F.getDate()) { t += " today" } if (K.valueOf() == p) { t += " active" } if ((K.valueOf() + 86400000) <= this.startDate || K.valueOf() > this.endDate || c.inArray(K.getUTCDay(), this.daysOfWeekDisabled) !== -1) { t += " disabled" } q.push('' + K.getUTCDate() + ""); if (K.getUTCDay() == this.weekEnd) { q.push("") } K.setUTCDate(K.getUTCDate() + 1) } this.picker.find(".datetimepicker-days tbody").empty().append(q.join("")); q = []; var u = "", E = "", r = ""; var h = this.hoursDisabled || []; for (var z = 0; z < 24; z++) { if (h.indexOf(z) !== -1) { continue } var v = f(s, H, l, z); t = ""; if ((v.valueOf() + 3600000) <= this.startDate || v.valueOf() > this.endDate) { t += " disabled" } else { if (B == z) { t += " active" } } if (this.showMeridian && d[this.language].meridiem.length == 2) { E = (z < 12 ? d[this.language].meridiem[0] : d[this.language].meridiem[1]); if (E != r) { if (r != "") { q.push("") } q.push('
' + E.toUpperCase() + "") } r = E; u = (z % 12 ? z % 12 : 12); q.push('' + u + ""); if (z == 23) { q.push("
") } } else { u = z + ":00"; q.push('' + u + "") } } this.picker.find(".datetimepicker-hours td").html(q.join("")); q = []; u = "", E = "", r = ""; var k = this.minutesDisabled || []; for (var z = 0; z < 60; z += this.minuteStep) { if (k.indexOf(z) !== -1) { continue } var v = f(s, H, l, B, z, 0); t = ""; if (v.valueOf() < this.startDate || v.valueOf() > this.endDate) { t += " disabled" } else { if (Math.floor(w / this.minuteStep) == Math.floor(z / this.minuteStep)) { t += " active" } } if (this.showMeridian && d[this.language].meridiem.length == 2) { E = (B < 12 ? d[this.language].meridiem[0] : d[this.language].meridiem[1]); if (E != r) { if (r != "") { q.push("") } q.push('
' + E.toUpperCase() + "") } r = E; u = (B % 12 ? B % 12 : 12); q.push('' + u + ":" + (z < 10 ? "0" + z : z) + ""); if (z == 59) { q.push("
") } } else { u = z + ":00"; q.push('' + B + ":" + (z < 10 ? "0" + z : z) + "") } } this.picker.find(".datetimepicker-minutes td").html(q.join("")); var L = this.date.getUTCFullYear(); var m = this.picker.find(".datetimepicker-months").find("th:eq(1)").text(s).end().find("span").removeClass("active"); if (L == s) { m.eq(this.date.getUTCMonth() + 2).addClass("active") } if (s < x || s > n) { m.addClass("disabled") } if (s == x) { m.slice(0, C + 1).addClass("disabled") } if (s == n) { m.slice(y).addClass("disabled") } q = ""; s = parseInt(s / 10, 10) * 10; var I = this.picker.find(".datetimepicker-years").find("th:eq(1)").text(s + "-" + (s + 9)).end().find("td"); s -= 1; for (var z = -1; z < 11; z++) { q += ' n ? " disabled" : "") + '">' + s + ""; s += 1 } I.html(q); this.place() }, updateNavArrows: function () { var k = new Date(this.viewDate), i = k.getUTCFullYear(), j = k.getUTCMonth(), h = k.getUTCDate(), g = k.getUTCHours(); switch (this.viewMode) { case 0: if (this.startDate !== -Infinity && i <= this.startDate.getUTCFullYear() && j <= this.startDate.getUTCMonth() && h <= this.startDate.getUTCDate() && g <= this.startDate.getUTCHours()) { this.picker.find(".prev").css({visibility: "hidden"}) } else { this.picker.find(".prev").css({visibility: "visible"}) } if (this.endDate !== Infinity && i >= this.endDate.getUTCFullYear() && j >= this.endDate.getUTCMonth() && h >= this.endDate.getUTCDate() && g >= this.endDate.getUTCHours()) { this.picker.find(".next").css({visibility: "hidden"}) } else { this.picker.find(".next").css({visibility: "visible"}) } break; case 1: if (this.startDate !== -Infinity && i <= this.startDate.getUTCFullYear() && j <= this.startDate.getUTCMonth() && h <= this.startDate.getUTCDate()) { this.picker.find(".prev").css({visibility: "hidden"}) } else { this.picker.find(".prev").css({visibility: "visible"}) } if (this.endDate !== Infinity && i >= this.endDate.getUTCFullYear() && j >= this.endDate.getUTCMonth() && h >= this.endDate.getUTCDate()) { this.picker.find(".next").css({visibility: "hidden"}) } else { this.picker.find(".next").css({visibility: "visible"}) } break; case 2: if (this.startDate !== -Infinity && i <= this.startDate.getUTCFullYear() && j <= this.startDate.getUTCMonth()) { this.picker.find(".prev").css({visibility: "hidden"}) } else { this.picker.find(".prev").css({visibility: "visible"}) } if (this.endDate !== Infinity && i >= this.endDate.getUTCFullYear() && j >= this.endDate.getUTCMonth()) { this.picker.find(".next").css({visibility: "hidden"}) } else { this.picker.find(".next").css({visibility: "visible"}) } break; case 3: case 4: if (this.startDate !== -Infinity && i <= this.startDate.getUTCFullYear()) { this.picker.find(".prev").css({visibility: "hidden"}) } else { this.picker.find(".prev").css({visibility: "visible"}) } if (this.endDate !== Infinity && i >= this.endDate.getUTCFullYear()) { this.picker.find(".next").css({visibility: "hidden"}) } else { this.picker.find(".next").css({visibility: "visible"}) } break } }, mousewheel: function (h) { h.preventDefault(); h.stopPropagation(); if (this.wheelPause) { return } this.wheelPause = true; var g = h.originalEvent; var j = g.wheelDelta; var i = j > 0 ? 1 : (j === 0) ? 0 : -1; if (this.wheelViewModeNavigationInverseDirection) { i = -i } this.showMode(i); setTimeout(c.proxy(function () { this.wheelPause = false }, this), this.wheelViewModeNavigationDelay) }, click: function (k) { k.stopPropagation(); k.preventDefault(); var l = c(k.target).closest("span, td, th, legend"); if (l.is("." + this.icontype)) { l = c(l).parent().closest("span, td, th, legend") } if (l.length == 1) { if (l.is(".disabled")) { this.element.trigger({ type: "outOfRange", date: this.viewDate, startDate: this.startDate, endDate: this.endDate }); return } switch (l[0].nodeName.toLowerCase()) { case"th": switch (l[0].className) { case"switch": this.showMode(1); break; case"prev": case"next": var g = b.modes[this.viewMode].navStep * (l[0].className == "prev" ? -1 : 1); switch (this.viewMode) { case 0: this.viewDate = this.moveHour(this.viewDate, g); break; case 1: this.viewDate = this.moveDate(this.viewDate, g); break; case 2: this.viewDate = this.moveMonth(this.viewDate, g); break; case 3: case 4: this.viewDate = this.moveYear(this.viewDate, g); break } this.fill(); this.element.trigger({ type: l[0].className + ":" + this.convertViewModeText(this.viewMode), date: this.viewDate, startDate: this.startDate, endDate: this.endDate }); break; case"today": var h = new Date(); h = f(h.getFullYear(), h.getMonth(), h.getDate(), h.getHours(), h.getMinutes(), h.getSeconds(), 0); if (h < this.startDate) { h = this.startDate } else { if (h > this.endDate) { h = this.endDate } } this.viewMode = this.startViewMode; this.showMode(0); this._setDate(h); this.fill(); if (this.autoclose) { this.hide() } break } break; case"span": if (!l.is(".disabled")) { var n = this.viewDate.getUTCFullYear(), m = this.viewDate.getUTCMonth(), o = this.viewDate.getUTCDate(), p = this.viewDate.getUTCHours(), i = this.viewDate.getUTCMinutes(), q = this.viewDate.getUTCSeconds(); if (l.is(".month")) { this.viewDate.setUTCDate(1); m = l.parent().find("span").index(l); o = this.viewDate.getUTCDate(); this.viewDate.setUTCMonth(m); this.element.trigger({type: "changeMonth", date: this.viewDate}); if (this.viewSelect >= 3) { this._setDate(f(n, m, o, p, i, q, 0)) } } else { if (l.is(".year")) { this.viewDate.setUTCDate(1); n = parseInt(l.text(), 10) || 0; this.viewDate.setUTCFullYear(n); this.element.trigger({type: "changeYear", date: this.viewDate}); if (this.viewSelect >= 4) { this._setDate(f(n, m, o, p, i, q, 0)) } } else { if (l.is(".hour")) { p = parseInt(l.text(), 10) || 0; if (l.hasClass("hour_am") || l.hasClass("hour_pm")) { if (p == 12 && l.hasClass("hour_am")) { p = 0 } else { if (p != 12 && l.hasClass("hour_pm")) { p += 12 } } } this.viewDate.setUTCHours(p); this.element.trigger({type: "changeHour", date: this.viewDate}); if (this.viewSelect >= 1) { this._setDate(f(n, m, o, p, i, q, 0)) } } else { if (l.is(".minute")) { i = parseInt(l.text().substr(l.text().indexOf(":") + 1), 10) || 0; this.viewDate.setUTCMinutes(i); this.element.trigger({type: "changeMinute", date: this.viewDate}); if (this.viewSelect >= 0) { this._setDate(f(n, m, o, p, i, q, 0)) } } } } } if (this.viewMode != 0) { var j = this.viewMode; this.showMode(-1); this.fill(); if (j == this.viewMode && this.autoclose) { this.hide() } } else { this.fill(); if (this.autoclose) { this.hide() } } } break; case"td": if (l.is(".day") && !l.is(".disabled")) { var o = parseInt(l.text(), 10) || 1; var n = this.viewDate.getUTCFullYear(), m = this.viewDate.getUTCMonth(), p = this.viewDate.getUTCHours(), i = this.viewDate.getUTCMinutes(), q = this.viewDate.getUTCSeconds(); if (l.is(".old")) { if (m === 0) { m = 11; n -= 1 } else { m -= 1 } } else { if (l.is(".new")) { if (m == 11) { m = 0; n += 1 } else { m += 1 } } } this.viewDate.setUTCFullYear(n); this.viewDate.setUTCMonth(m, o); this.element.trigger({type: "changeDay", date: this.viewDate}); if (this.viewSelect >= 2) { this._setDate(f(n, m, o, p, i, q, 0)) } } var j = this.viewMode; this.showMode(-1); this.fill(); if (j == this.viewMode && this.autoclose) { this.hide() } break } } }, _setDate: function (g, i) { if (!i || i == "date") { this.date = g } if (!i || i == "view") { this.viewDate = g } this.fill(); this.setValue(); var h; if (this.isInput) { h = this.element } else { if (this.component) { h = this.element.find("input") } } if (h) { h.change(); if (this.autoclose && (!i || i == "date")) { } } this.element.trigger({type: "changeDate", date: this.date}) }, moveMinute: function (h, g) { if (!g) { return h } var i = new Date(h.valueOf()); i.setUTCMinutes(i.getUTCMinutes() + (g * this.minuteStep)); return i }, moveHour: function (h, g) { if (!g) { return h } var i = new Date(h.valueOf()); i.setUTCHours(i.getUTCHours() + g); return i }, moveDate: function (h, g) { if (!g) { return h } var i = new Date(h.valueOf()); i.setUTCDate(i.getUTCDate() + g); return i }, moveMonth: function (g, h) { if (!h) { return g } var l = new Date(g.valueOf()), p = l.getUTCDate(), m = l.getUTCMonth(), k = Math.abs(h), o, n; h = h > 0 ? 1 : -1; if (k == 1) { n = h == -1 ? function () { return l.getUTCMonth() == m } : function () { return l.getUTCMonth() != o }; o = m + h; l.setUTCMonth(o); if (o < 0 || o > 11) { o = (o + 12) % 12 } } else { for (var j = 0; j < k; j++) { l = this.moveMonth(l, h) } o = l.getUTCMonth(); l.setUTCDate(p); n = function () { return o != l.getUTCMonth() } } while (n()) { l.setUTCDate(--p); l.setUTCMonth(o) } return l }, moveYear: function (h, g) { return this.moveMonth(h, g * 12) }, dateWithinRange: function (g) { return g >= this.startDate && g <= this.endDate }, keydown: function (k) { if (this.picker.is(":not(:visible)")) { if (k.keyCode == 27) { this.show() } return } var m = false, h, n, l, o, g; switch (k.keyCode) { case 27: this.hide(); k.preventDefault(); break; case 37: case 39: if (!this.keyboardNavigation) { break } h = k.keyCode == 37 ? -1 : 1; viewMode = this.viewMode; if (k.ctrlKey) { viewMode += 2 } else { if (k.shiftKey) { viewMode += 1 } } if (viewMode == 4) { o = this.moveYear(this.date, h); g = this.moveYear(this.viewDate, h) } else { if (viewMode == 3) { o = this.moveMonth(this.date, h); g = this.moveMonth(this.viewDate, h) } else { if (viewMode == 2) { o = this.moveDate(this.date, h); g = this.moveDate(this.viewDate, h) } else { if (viewMode == 1) { o = this.moveHour(this.date, h); g = this.moveHour(this.viewDate, h) } else { if (viewMode == 0) { o = this.moveMinute(this.date, h); g = this.moveMinute(this.viewDate, h) } } } } } if (this.dateWithinRange(o)) { this.date = o; this.viewDate = g; this.setValue(); this.update(); k.preventDefault(); m = true } break; case 38: case 40: if (!this.keyboardNavigation) { break } h = k.keyCode == 38 ? -1 : 1; viewMode = this.viewMode; if (k.ctrlKey) { viewMode += 2 } else { if (k.shiftKey) { viewMode += 1 } } if (viewMode == 4) { o = this.moveYear(this.date, h); g = this.moveYear(this.viewDate, h) } else { if (viewMode == 3) { o = this.moveMonth(this.date, h); g = this.moveMonth(this.viewDate, h) } else { if (viewMode == 2) { o = this.moveDate(this.date, h * 7); g = this.moveDate(this.viewDate, h * 7) } else { if (viewMode == 1) { if (this.showMeridian) { o = this.moveHour(this.date, h * 6); g = this.moveHour(this.viewDate, h * 6) } else { o = this.moveHour(this.date, h * 4); g = this.moveHour(this.viewDate, h * 4) } } else { if (viewMode == 0) { o = this.moveMinute(this.date, h * 4); g = this.moveMinute(this.viewDate, h * 4) } } } } } if (this.dateWithinRange(o)) { this.date = o; this.viewDate = g; this.setValue(); this.update(); k.preventDefault(); m = true } break; case 13: if (this.viewMode != 0) { var j = this.viewMode; this.showMode(-1); this.fill(); if (j == this.viewMode && this.autoclose) { this.hide() } } else { this.fill(); if (this.autoclose) { this.hide() } } k.preventDefault(); break; case 9: this.hide(); break } if (m) { var i; if (this.isInput) { i = this.element } else { if (this.component) { i = this.element.find("input") } } if (i) { i.change() } this.element.trigger({type: "changeDate", date: this.date}) } }, showMode: function (g) { if (g) { var h = Math.max(0, Math.min(b.modes.length - 1, this.viewMode + g)); if (h >= this.minView && h <= this.maxView) { this.element.trigger({ type: "changeMode", date: this.viewDate, oldViewMode: this.viewMode, newViewMode: h }); this.viewMode = h } } this.picker.find(">div").hide().filter(".datetimepicker-" + b.modes[this.viewMode].clsName).css("display", "block"); this.updateNavArrows() }, reset: function (g) { this._setDate(null, "date") }, convertViewModeText: function (g) { switch (g) { case 4: return "decade"; case 3: return "year"; case 2: return "month"; case 1: return "day"; case 0: return "hour" } } }; c.fn.datetimepicker = function (i) { var g = Array.apply(null, arguments); g.shift(); var h; this.each(function () { var l = c(this), k = l.data("datetimepicker"), j = typeof i == "object" && i; if (!k) { l.data("datetimepicker", (k = new e(this, c.extend({}, c.fn.datetimepicker.defaults, j)))) } if (typeof i == "string" && typeof k[i] == "function") { h = k[i].apply(k, g); if (h !== undefined) { return false } } }); if (h !== undefined) { return h } else { return this } }; c.fn.datetimepicker.defaults = {}; c.fn.datetimepicker.Constructor = e; var d = c.fn.datetimepicker.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"], meridiem: ["am", "pm"], suffix: ["st", "nd", "rd", "th"], today: "Today"*/ days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六","星期日"], daysShort: ["日", "一", "二", "三", "四", "五", "六","日"], daysMin: ["日", "一", "二", "三", "四", "五", "六","日"], months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月","十二月"], monthsShort: ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二"], meridiem: ["上午", "下午"], //suffix: ["st", "nd", "rd", "th"], today: "今天" } }; var b = { modes: [{clsName: "minutes", navFnc: "Hours", navStep: 1}, { clsName: "hours", navFnc: "Date", navStep: 1 }, {clsName: "days", navFnc: "Month", navStep: 1}, { clsName: "months", navFnc: "FullYear", navStep: 1 }, {clsName: "years", navFnc: "FullYear", navStep: 10}], isLeapYear: function (g) { return (((g % 4 === 0) && (g % 100 !== 0)) || (g % 400 === 0)) }, getDaysInMonth: function (g, h) { return [31, (b.isLeapYear(g) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][h] }, getDefaultFormat: function (g, h) { if (g == "standard") { if (h == "input") { return "yyyy-mm-dd hh:ii" } else { return "yyyy-mm-dd hh:ii:ss" } } else { if (g == "php") { if (h == "input") { return "Y-m-d H:i" } else { return "Y-m-d H:i:s" } } else { throw new Error("Invalid format type.") } } }, validParts: function (g) { if (g == "standard") { return /hh?|HH?|p|P|ii?|ss?|dd?|DD?|mm?|MM?|yy(?:yy)?/g } else { if (g == "php") { return /[dDjlNwzFmMnStyYaABgGhHis]/g } else { throw new Error("Invalid format type.") } } }, nonpunctuation: /[^ -\/:-@\[-`{-~\t\n\rTZ]+/g, parseFormat: function (j, h) { var g = j.replace(this.validParts(h), "\0").split("\0"), i = j.match(this.validParts(h)); if (!g || !g.length || !i || i.length == 0) { throw new Error("Invalid date format.") } return {separators: g, parts: i} }, parseDate: function (l, u, o, r) { if (l instanceof Date) { var w = new Date(l.valueOf() - l.getTimezoneOffset() * 60000); w.setMilliseconds(0); return w } if (/^\d{4}\-\d{1,2}\-\d{1,2}$/.test(l)) { u = this.parseFormat("yyyy-mm-dd", r) } if (/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}$/.test(l)) { u = this.parseFormat("yyyy-mm-dd hh:ii", r) } if (/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}\:\d{1,2}[Z]{0,1}$/.test(l)) { u = this.parseFormat("yyyy-mm-dd hh:ii:ss", r) } if (/^[-+]\d+[dmwy]([\s,]+[-+]\d+[dmwy])*$/.test(l)) { var x = /([-+]\d+)([dmwy])/, m = l.match(/([-+]\d+)([dmwy])/g), g, k; l = new Date(); for (var n = 0; n < m.length; n++) { g = x.exec(m[n]); k = parseInt(g[1]); switch (g[2]) { case"d": l.setUTCDate(l.getUTCDate() + k); break; case"m": l = e.prototype.moveMonth.call(e.prototype, l, k); break; case"w": l.setUTCDate(l.getUTCDate() + k * 7); break; case"y": l = e.prototype.moveYear.call(e.prototype, l, k); break } } return f(l.getUTCFullYear(), l.getUTCMonth(), l.getUTCDate(), l.getUTCHours(), l.getUTCMinutes(), l.getUTCSeconds(), 0) } var m = l && l.match(this.nonpunctuation) || [], l = new Date(0, 0, 0, 0, 0, 0, 0), q = {}, t = ["hh", "h", "ii", "i", "ss", "s", "yyyy", "yy", "M", "MM", "m", "mm", "D", "DD", "d", "dd", "H", "HH", "p", "P"], v = { hh: function (s, i) { return s.setUTCHours(i) }, h: function (s, i) { return s.setUTCHours(i) }, HH: function (s, i) { return s.setUTCHours(i == 12 ? 0 : i) }, H: function (s, i) { return s.setUTCHours(i == 12 ? 0 : i) }, ii: function (s, i) { return s.setUTCMinutes(i) }, i: function (s, i) { return s.setUTCMinutes(i) }, ss: function (s, i) { return s.setUTCSeconds(i) }, s: function (s, i) { return s.setUTCSeconds(i) }, yyyy: function (s, i) { return s.setUTCFullYear(i) }, yy: function (s, i) { return s.setUTCFullYear(2000 + i) }, m: function (s, i) { i -= 1; while (i < 0) { i += 12 } i %= 12; s.setUTCMonth(i); while (s.getUTCMonth() != i) { if (isNaN(s.getUTCMonth())) { return s } else { s.setUTCDate(s.getUTCDate() - 1) } } return s }, d: function (s, i) { return s.setUTCDate(i) }, p: function (s, i) { return s.setUTCHours(i == 1 ? s.getUTCHours() + 12 : s.getUTCHours()) } }, j, p, g; v.M = v.MM = v.mm = v.m; v.dd = v.d; v.P = v.p; l = f(l.getFullYear(), l.getMonth(), l.getDate(), l.getHours(), l.getMinutes(), l.getSeconds()); if (m.length == u.parts.length) { for (var n = 0, h = u.parts.length; n < h; n++) { j = parseInt(m[n], 10); g = u.parts[n]; if (isNaN(j)) { switch (g) { case"MM": p = c(d[o].months).filter(function () { var i = this.slice(0, m[n].length), s = m[n].slice(0, i.length); return i == s }); j = c.inArray(p[0], d[o].months) + 1; break; case"M": p = c(d[o].monthsShort).filter(function () { var i = this.slice(0, m[n].length), s = m[n].slice(0, i.length); return i.toLowerCase() == s.toLowerCase() }); j = c.inArray(p[0], d[o].monthsShort) + 1; break; case"p": case"P": j = c.inArray(m[n].toLowerCase(), d[o].meridiem); break } } q[g] = j } for (var n = 0, y; n < t.length; n++) { y = t[n]; if (y in q && !isNaN(q[y])) { v[y](l, q[y]) } } } return l }, formatDate: function (g, m, o, k) { if (g == null) { return "" } var n; if (k == "standard") { n = { yy: g.getUTCFullYear().toString().substring(2), yyyy: g.getUTCFullYear(), m: g.getUTCMonth() + 1, M: d[o].monthsShort[g.getUTCMonth()], MM: d[o].months[g.getUTCMonth()], d: g.getUTCDate(), D: d[o].daysShort[g.getUTCDay()], DD: d[o].days[g.getUTCDay()], p: (d[o].meridiem.length == 2 ? d[o].meridiem[g.getUTCHours() < 12 ? 0 : 1] : ""), h: g.getUTCHours(), i: g.getUTCMinutes(), s: g.getUTCSeconds() }; if (d[o].meridiem.length == 2) { n.H = (n.h % 12 == 0 ? 12 : n.h % 12) } else { n.H = n.h } n.HH = (n.H < 10 ? "0" : "") + n.H; n.P = n.p.toUpperCase(); n.hh = (n.h < 10 ? "0" : "") + n.h; n.ii = (n.i < 10 ? "0" : "") + n.i; n.ss = (n.s < 10 ? "0" : "") + n.s; n.dd = (n.d < 10 ? "0" : "") + n.d; n.mm = (n.m < 10 ? "0" : "") + n.m } else { if (k == "php") { n = { y: g.getUTCFullYear().toString().substring(2), Y: g.getUTCFullYear(), F: d[o].months[g.getUTCMonth()], M: d[o].monthsShort[g.getUTCMonth()], n: g.getUTCMonth() + 1, t: b.getDaysInMonth(g.getUTCFullYear(), g.getUTCMonth()), j: g.getUTCDate(), l: d[o].days[g.getUTCDay()], D: d[o].daysShort[g.getUTCDay()], w: g.getUTCDay(), N: (g.getUTCDay() == 0 ? 7 : g.getUTCDay()), S: (g.getUTCDate() % 10 <= d[o].suffix.length ? d[o].suffix[g.getUTCDate() % 10 - 1] : ""), a: (d[o].meridiem.length == 2 ? d[o].meridiem[g.getUTCHours() < 12 ? 0 : 1] : ""), g: (g.getUTCHours() % 12 == 0 ? 12 : g.getUTCHours() % 12), G: g.getUTCHours(), i: g.getUTCMinutes(), s: g.getUTCSeconds() }; n.m = (n.n < 10 ? "0" : "") + n.n; n.d = (n.j < 10 ? "0" : "") + n.j; n.A = n.a.toString().toUpperCase(); n.h = (n.g < 10 ? "0" : "") + n.g; n.H = (n.G < 10 ? "0" : "") + n.G; n.i = (n.i < 10 ? "0" : "") + n.i; n.s = (n.s < 10 ? "0" : "") + n.s } else { throw new Error("Invalid format type.") } } var g = [], l = c.extend([], m.separators); for (var j = 0, h = m.parts.length; j < h; j++) { if (l.length) { g.push(l.shift()) } g.push(n[m.parts[j]]) } if (l.length) { g.push(l.shift()) } return g.join("") }, convertViewMode: function (g) { switch (g) { case 4: case"decade": g = 4; break; case 3: case"year": g = 3; break; case 2: case"month": g = 2; break; case 1: case"day": g = 1; break; case 0: case"hour": g = 0; break } return g }, headTemplate: '', headTemplateV3: ' ', contTemplate: '', footTemplate: '' }; b.template = '
' + b.headTemplate + b.contTemplate + b.footTemplate + '
' + b.headTemplate + b.contTemplate + b.footTemplate + '
' + b.headTemplate + "" + b.footTemplate + '
' + b.headTemplate + b.contTemplate + b.footTemplate + '
' + b.headTemplate + b.contTemplate + b.footTemplate + "
"; b.templateV3 = '
' + b.headTemplateV3 + b.contTemplate + b.footTemplate + '
' + b.headTemplateV3 + b.contTemplate + b.footTemplate + '
' + b.headTemplateV3 + "" + b.footTemplate + '
' + b.headTemplateV3 + b.contTemplate + b.footTemplate + '
' + b.headTemplateV3 + b.contTemplate + b.footTemplate + "
"; c.fn.datetimepicker.DPGlobal = b; c.fn.datetimepicker.noConflict = function () { c.fn.datetimepicker = old; return this }; c(document).on("focus.datetimepicker.data-api click.datetimepicker.data-api", '[data-provide="datetimepicker"]', function (h) { var g = c(this); if (g.data("datetimepicker")) { return } h.preventDefault(); g.datetimepicker("show") }); c(function () { c('[data-provide="datetimepicker-inline"]').datetimepicker() }) }(window.jQuery); /** * Simplified Chinese translation for bootstrap-datetimepicker * Yuan Cheung */ ;(function ($) { $.fn.datetimepicker.dates['zh-CN'] = { days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"], daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], today: "今日", suffix: [], meridiem: ["上午", "下午"] }; }(window.jQuery));