Adjust timezone/DST differences on the client (#467)
This commit is contained in:
parent
170f7bf747
commit
3184004518
2 changed files with 10 additions and 17 deletions
|
@ -1026,19 +1026,6 @@ class calendar extends rcube_plugin
|
|||
return $ts + $this->gmt_offset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fix DST difference between client and target date
|
||||
*/
|
||||
function fixDST($time)
|
||||
{
|
||||
$date = new DateTime(null, $this->user_timezone);
|
||||
$date->setTimeStamp($time);
|
||||
$diff = $date->format('I') - $this->dst_active;
|
||||
$time += $diff * 3600;
|
||||
|
||||
return $time;
|
||||
}
|
||||
|
||||
/**
|
||||
* Encode events as JSON
|
||||
*
|
||||
|
@ -1552,8 +1539,8 @@ class calendar extends rcube_plugin
|
|||
*/
|
||||
private function prepare_event(&$event, $action)
|
||||
{
|
||||
$event['start'] = $this->fixDST($event['start']);
|
||||
$event['end'] = $this->fixDST($event['end']);
|
||||
$event['start'] = $event['start'];
|
||||
$event['end'] = $event['end'];
|
||||
|
||||
$attachments = array();
|
||||
$eventid = 'cal:'.$event['id'];
|
||||
|
|
|
@ -33,6 +33,7 @@ function rcube_calendar_ui(settings)
|
|||
var HOUR_MS = 3600000;
|
||||
var me = this;
|
||||
var gmt_offset = (new Date().getTimezoneOffset() / -60) - (settings.timezone || 0) - (settings.dst || 0);
|
||||
var client_timezone = new Date().getTimezoneOffset();
|
||||
var day_clicked = day_clicked_ts = 0;
|
||||
var ignore_click = false;
|
||||
var event_defaults = { free_busy:'busy' };
|
||||
|
@ -162,13 +163,18 @@ function rcube_calendar_ui(settings)
|
|||
// convert the given Date object into a unix timestamp respecting browser's and user's timezone settings
|
||||
var date2unixtime = function(date)
|
||||
{
|
||||
return Math.round(date.getTime()/1000 + gmt_offset * 3600);
|
||||
var dst_offset = (client_timezone - date.getTimezoneOffset()) * 60; // adjust DST offset
|
||||
return Math.round(date.getTime()/1000 + gmt_offset * 3600 + dst_offset);
|
||||
};
|
||||
|
||||
var fromunixtime = function(ts)
|
||||
{
|
||||
ts -= gmt_offset * 3600;
|
||||
return new Date(ts * 1000);
|
||||
var date = new Date(ts * 1000),
|
||||
dst_offset = (client_timezone - date.getTimezoneOffset()) * 60;
|
||||
if (dst_offset) // adjust DST offset
|
||||
date.setTime((ts + 3600) * 1000);
|
||||
return date;
|
||||
};
|
||||
|
||||
// determine whether the given date is on a weekend
|
||||
|
|
Loading…
Add table
Reference in a new issue