aboutsummaryrefslogtreecommitdiffstats
path: root/apps/dav
diff options
context:
space:
mode:
authorChristoph Wurst <christoph@winzerhof-wurst.at>2023-11-24 09:45:56 +0100
committerChristoph Wurst <christoph@winzerhof-wurst.at>2023-11-24 09:45:56 +0100
commit096537eae56fda3fb2c39e350f65a2072ba8a1ff (patch)
tree0a3d5c82eb515d1bd48a2e942ce8bfefeaf62314 /apps/dav
parenteeba809a524eaba93abbe3288e23594da470de27 (diff)
downloadnextcloud-server-096537eae56fda3fb2c39e350f65a2072ba8a1ff.tar.gz
nextcloud-server-096537eae56fda3fb2c39e350f65a2072ba8a1ff.zip
fix(dav): Avoid date diffing if PHP is buggy
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
Diffstat (limited to 'apps/dav')
-rw-r--r--apps/dav/lib/CalDAV/Reminder/Notifier.php32
1 files changed, 23 insertions, 9 deletions
diff --git a/apps/dav/lib/CalDAV/Reminder/Notifier.php b/apps/dav/lib/CalDAV/Reminder/Notifier.php
index 271d8e88fa7..657714d0247 100644
--- a/apps/dav/lib/CalDAV/Reminder/Notifier.php
+++ b/apps/dav/lib/CalDAV/Reminder/Notifier.php
@@ -170,21 +170,35 @@ class Notifier implements INotifier {
$components[] = $this->l10n->n('%n minute', '%n minutes', $diff->i);
}
- // Limiting to the first three components to prevent
- // the string from getting too long
- $firstThreeComponents = array_slice($components, 0, 2);
- $diffLabel = implode(', ', $firstThreeComponents);
-
- if ($diff->invert) {
- $title = $this->l10n->t('%s (in %s)', [$title, $diffLabel]);
- } else {
- $title = $this->l10n->t('%s (%s ago)', [$title, $diffLabel]);
+ if (!$this->hasPhpDatetimeDiffBug()) {
+ // Limiting to the first three components to prevent
+ // the string from getting too long
+ $firstThreeComponents = array_slice($components, 0, 2);
+ $diffLabel = implode(', ', $firstThreeComponents);
+
+ if ($diff->invert) {
+ $title = $this->l10n->t('%s (in %s)', [$title, $diffLabel]);
+ } else {
+ $title = $this->l10n->t('%s (%s ago)', [$title, $diffLabel]);
+ }
}
$notification->setParsedSubject($title);
}
/**
+ * @see https://github.com/nextcloud/server/issues/41615
+ * @see https://github.com/php/php-src/issues/9699
+ */
+ private function hasPhpDatetimeDiffBug(): bool {
+ $d1 = DateTime::createFromFormat(\DateTimeInterface::ATOM, '2023-11-22T11:52:00+01:00');
+ $d2 = new DateTime('2023-11-22T10:52:03', new \DateTimeZone('UTC'));
+
+ // The difference is 3 seconds, not -1year+11months+…
+ return $d1->diff($d2)->y < 0;
+ }
+
+ /**
* Sets the notification message based on the parameters set in PushProvider
*
* @param INotification $notification