summaryrefslogtreecommitdiffstats
path: root/apps/dav
diff options
context:
space:
mode:
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 c658ef2ff01..32683e43b82 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