* eSync/Mail: fix wrong timezone conversation if user-timezone is different from server-timezone

This commit is contained in:
ralf 2023-05-09 17:03:11 +02:00
parent 134cd9d249
commit db8bd9dcc3
2 changed files with 12 additions and 3 deletions

View File

@ -4351,13 +4351,21 @@ class Mail
* *
* @param string $_date to be parsed/formatted * @param string $_date to be parsed/formatted
* @param string $format ='' if none is passed, use user prefs * @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 * @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 { try {
$date = new DateTime($_date); // parse date & time including timezone (throws exception, if not parsable) $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); $date2return = $date->format($format);
} }
catch(\Exception $e) catch(\Exception $e)
@ -4378,6 +4386,7 @@ class Mail
$date2return = DateTime::to('now', $format); $date2return = DateTime::to('now', $format);
} }
} }
//error_log(__METHOD__."(date=".json_encode($_date).", format='$format', convert2usertime=".json_encode($convert2usertime).") returning ".json_encode($date2return));
return $date2return; return $date2return;
} }

View File

@ -1087,7 +1087,7 @@ class mail_zpush implements activesync_plugin_write, activesync_plugin_sendmail,
$output->subject = $headers['subject']; $output->subject = $headers['subject'];
$output->importance = $headers['priority'] > 3 ? 0 : $output->importance = $headers['priority'] > 3 ? 0 :
($headers['priority'] < 3 ? 2 : 1) ; ($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']; $output->to = $headers['to_address'];
if (!empty($headers['to'])) $output->displayto = $headers['to_address']; //$headers['FETCHED_HEADER']['to_name'] if (!empty($headers['to'])) $output->displayto = $headers['to_address']; //$headers['FETCHED_HEADER']['to_name']
$output->from = $headers['sender_address']; $output->from = $headers['sender_address'];