Adjust timezone/DST differences on the client (#467)

This commit is contained in:
Thomas 2011-10-24 22:57:54 +02:00
parent 170f7bf747
commit 3184004518
2 changed files with 10 additions and 17 deletions

View file

@ -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'];

View file

@ -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