diff --git a/e107_web/js/bootstrap-datetimepicker/js/bootstrap-datetimepicker.init.js b/e107_web/js/bootstrap-datetimepicker/js/bootstrap-datetimepicker.init.js index 8808954ad..f9058774e 100755 --- a/e107_web/js/bootstrap-datetimepicker/js/bootstrap-datetimepicker.init.js +++ b/e107_web/js/bootstrap-datetimepicker/js/bootstrap-datetimepicker.init.js @@ -14,42 +14,46 @@ var e107 = e107 || {'settings': {}, 'behaviors': {}}; var $item = $(this); // Fix for changeDate() not being fired when value manually altered. - $item.on("change keyup", function () { - var $this = $(this); - var useUnix = $this.attr("data-date-unix"); - var newValue = $this.val(); - - if (useUnix !== "true" || newValue == "") { + $item.on("change keyup", function() { + var $this = $(this); + var useUnix = $this.attr("data-date-unix"); + var newValue = $this.val(); var id = $this.attr("id"); var newTarget = "#" + id.replace("e-datepicker-", ""); - $(newTarget).val(newValue); - } - // If UNIX timestamp is required, manually convert the date string (dd.mm.yyyy) - if (useUnix === "true") { - var parts = newValue.split("."); - if (parts.length === 3) { - var day = parseInt(parts[0], 10); - var month = parseInt(parts[1], 10) - 1; // Month is zero-based in JS - var year = parseInt(parts[2], 10); - - // Validate date parts - if (!isNaN(day) && !isNaN(month) && !isNaN(year)) { - var date = new Date(year, month, day); - var unixTimestamp = Math.floor(date.getTime() / 1000); - var id = $this.attr("id"); - var newTarget = "#" + id.replace("e-datepicker-", ""); - $(newTarget).val(unixTimestamp); // Update hidden UNIX field - } + // For non-UNIX fields or empty values, just copy the value + if (useUnix !== "true" || newValue === "") { + $(newTarget).val(newValue); + return; + } + + // For UNIX timestamp conversion, use the datetimepicker instance + try { + // Get date from the picker (handles format automatically) + var pickerInstance = $this.data('datetimepicker'); + if (!pickerInstance) return; + + var date = pickerInstance.getDate(); + if (!date || isNaN(date.getTime())) return; + + // Convert to UNIX timestamp + var unixTimestamp = Math.floor(date.getTime() / 1000); + + // Apply timezone offset if this is a datetime field + if ($this.hasClass('e-datetime')) { + var offset = parseInt($this.attr("data-date-timezone-offset")); + if (!isNaN(offset)) { + var browserOffset = date.getTimezoneOffset() * 60; + var relativeOffset = browserOffset + offset; + unixTimestamp = unixTimestamp - relativeOffset; + } + } + + $(newTarget).val(unixTimestamp); + } catch (e) { + console.error("Error processing date:", e); } - } else { - // If not using UNIX timestamp, update with raw value - var id = $this.attr("id"); - var newTarget = "#" + id.replace("e-datepicker-", ""); - $(newTarget).val(newValue); // Update hidden field with text input value - } }); - }); $(context).find('input.e-date').once('datetimepicker-init').each(function () {