From f8dca83bf3721a499d1538c357da164bc3210d79 Mon Sep 17 00:00:00 2001 From: ralf Date: Tue, 9 May 2023 17:03:11 +0200 Subject: [PATCH] * eSync/Mail: fix wrong timezone conversation if user-timezone is different from server-timezone --- api/src/Mail.php | 13 +++++++++++-- mail/inc/class.mail_zpush.inc.php | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/api/src/Mail.php b/api/src/Mail.php index 7a7780a2ba..b7ef9b2018 100644 --- a/api/src/Mail.php +++ b/api/src/Mail.php @@ -4351,13 +4351,21 @@ class Mail * * @param string $_date to be parsed/formatted * @param string $format ='' if none is passed, use user prefs + * @param boolean|null $convert2usertime true: user-, false: server-timezone, null: as parsed * @return string returns the date as it is parseable by strtotime, or current timestamp if everything fails */ - static function _strtotime($_date='', $format='', $convert2usertime=false) + static function _strtotime($_date='', $format='', $convert2usertime=null) { try { $date = new DateTime($_date); // parse date & time including timezone (throws exception, if not parsable) - if ($convert2usertime) $date->setUser(); // convert to user-time + if ($convert2usertime === true) + { + $date->setUser(); // convert to user-time + } + elseif ($convert2usertime === false) + { + $date->setServer(); // convert to server-time + } $date2return = $date->format($format); } catch(\Exception $e) @@ -4378,6 +4386,7 @@ class Mail $date2return = DateTime::to('now', $format); } } + //error_log(__METHOD__."(date=".json_encode($_date).", format='$format', convert2usertime=".json_encode($convert2usertime).") returning ".json_encode($date2return)); return $date2return; } diff --git a/mail/inc/class.mail_zpush.inc.php b/mail/inc/class.mail_zpush.inc.php index 20fca0b839..a8ab002e30 100644 --- a/mail/inc/class.mail_zpush.inc.php +++ b/mail/inc/class.mail_zpush.inc.php @@ -1087,7 +1087,7 @@ class mail_zpush implements activesync_plugin_write, activesync_plugin_sendmail, $output->subject = $headers['subject']; $output->importance = $headers['priority'] > 3 ? 0 : ($headers['priority'] < 3 ? 2 : 1) ; - $output->datereceived = $this->mail->_strtotime($headers['date'],'ts',true); + $output->datereceived = $this->mail->_strtotime($headers['date'], 'ts', false); // false = servertime $output->to = $headers['to_address']; if (!empty($headers['to'])) $output->displayto = $headers['to_address']; //$headers['FETCHED_HEADER']['to_name'] $output->from = $headers['sender_address'];