mirror of
https://github.com/e107inc/e107.git
synced 2025-04-22 13:41:52 +02:00
datetimepicker() assumes the timezone to be that of the browser, which can pose problems in some situations. Now we can set a different timezone for the datepicker input and the UTC value will be automatically adjusted. eg. writeParms = array(type='datetime', 'timezone'=>'America/Los_Angeles')
This commit is contained in:
parent
d023cfc63c
commit
bab26e7762
e107_handlers
e107_web/js/bootstrap-datetimepicker/js
@ -1437,7 +1437,10 @@ class e_form
|
||||
* on Submit returns unix timestamp or string value.
|
||||
* @param string $name the name of the field
|
||||
* @param integer $datestamp UNIX timestamp - default value of the field
|
||||
* @param array or str
|
||||
* @param array or str
|
||||
* @param string $options['type'] date or datetime
|
||||
* @param string $options['format'] strftime format eg. '%Y-%m-%d'
|
||||
* @param string $options['timezone'] eg. 'America/Los_Angeles' - intended timezone of the date/time entered. (offsets UTC value)
|
||||
* @example $frm->datepicker('my_field',time(),'type=date');
|
||||
* @example $frm->datepicker('my_field',time(),'type=datetime&inline=1');
|
||||
* @example $frm->datepicker('my_field',time(),'type=date&format=yyyy-mm-dd');
|
||||
@ -1493,6 +1496,15 @@ class e_form
|
||||
$firstDay = vartrue($options['firstDay']) ? $options['firstDay'] : 0;
|
||||
$xsize = (vartrue($options['size']) && !is_numeric($options['size'])) ? $options['size'] : 'xlarge';
|
||||
$disabled = vartrue($options['disabled']) ? "disabled" : "";
|
||||
$timezone = '';
|
||||
|
||||
if(!empty($options['timezone'])) // since datetimepicker does not support timezones and assumes the browser timezone is the intended timezone.
|
||||
{
|
||||
date_default_timezone_set($options['timezone']);
|
||||
$targetOffset = date('Z');
|
||||
date_default_timezone_set(USERTIMEZONE);
|
||||
$timezone = "data-date-timezone-offset='".$targetOffset."'";
|
||||
}
|
||||
|
||||
$text = "";
|
||||
|
||||
@ -1503,7 +1515,7 @@ class e_form
|
||||
}
|
||||
else
|
||||
{
|
||||
$text .= "<input class='{$class} input-".$xsize." form-control' type='text' size='{$size}' id='e-datepicker-{$id}' value='{$value}' data-date-unix ='{$useUnix}' data-date-format='{$dformat}' data-date-ampm='{$ampm}' data-date-language='".e_LAN."' data-date-firstday='{$firstDay}' {$required} {$disabled} />";
|
||||
$text .= "<input class='{$class} input-".$xsize." form-control' type='text' size='{$size}' id='e-datepicker-{$id}' value='{$value}' data-date-unix ='{$useUnix}' data-date-format='{$dformat}' data-date-ampm='{$ampm}' data-date-language='".e_LAN."' data-date-firstday='{$firstDay}' {$required} {$disabled} {$timezone} />";
|
||||
$ftype = (!empty($options['debug'])) ? 'text' : 'hidden';
|
||||
$text .= "<input type='{$ftype}' name='{$name}' id='{$id}' value='{$hiddenValue}' />";
|
||||
}
|
||||
|
@ -75,6 +75,20 @@ var e107 = e107 || {'settings': {}, 'behaviors': {}};
|
||||
newValue = $("#" + ev.target.id).val();
|
||||
}
|
||||
|
||||
offset = parseInt($item.attr("data-date-timezone-offset"));
|
||||
|
||||
if(offset) // adjust UTC value to target timezone. ie. timezone other than the one of the browser.
|
||||
{
|
||||
browserOffset = ev.date.getTimezoneOffset() * 60;
|
||||
relativeOffset = browserOffset + offset;
|
||||
|
||||
console.log("Browser Offset: " + browserOffset);
|
||||
console.log('Offset: ' + offset);
|
||||
console.log('Relative Offset: ' + relativeOffset);
|
||||
|
||||
newValue = newValue - relativeOffset;
|
||||
}
|
||||
|
||||
$(newTarget).val(newValue);
|
||||
|
||||
})
|
||||
|
Loading…
x
Reference in New Issue
Block a user