diff --git a/lib/private/DateTimeFormatter.php b/lib/private/DateTimeFormatter.php index 3d0a4dd620..a8355d886f 100644 --- a/lib/private/DateTimeFormatter.php +++ b/lib/private/DateTimeFormatter.php @@ -159,17 +159,41 @@ class DateTimeFormatter implements \OCP\IDateTimeFormatter { if ($dateInterval->y == 0 && $dateInterval->m == 0 && $dateInterval->d == 0) { return (string) $l->t('today'); } else if ($dateInterval->y == 0 && $dateInterval->m == 0 && $dateInterval->d == 1) { - return (string) $l->t('yesterday'); + if ($timestamp > $baseTimestamp) { + return (string) $l->t('tomorrow'); + } else { + return (string) $l->t('yesterday'); + } } else if ($dateInterval->y == 0 && $dateInterval->m == 0) { - return (string) $l->n('%n day ago', '%n days ago', $dateInterval->d); + if ($timestamp > $baseTimestamp) { + return (string) $l->n('in %n day', 'in %n days', $dateInterval->d); + } else { + return (string) $l->n('%n day ago', '%n days ago', $dateInterval->d); + } } else if ($dateInterval->y == 0 && $dateInterval->m == 1) { - return (string) $l->t('last month'); + if ($timestamp > $baseTimestamp) { + return (string) $l->t('next month'); + } else { + return (string) $l->t('last month'); + } } else if ($dateInterval->y == 0) { - return (string) $l->n('%n month ago', '%n months ago', $dateInterval->m); + if ($timestamp > $baseTimestamp) { + return (string) $l->n('in %n month', 'in %n months', $dateInterval->m); + } else { + return (string) $l->n('%n month ago', '%n months ago', $dateInterval->m); + } } else if ($dateInterval->y == 1) { - return (string) $l->t('last year'); + if ($timestamp > $baseTimestamp) { + return (string) $l->t('next year'); + } else { + return (string) $l->t('last year'); + } + } + if ($timestamp > $baseTimestamp) { + return (string) $l->n('in %n year', 'in %n years', $dateInterval->y); + } else { + return (string) $l->n('%n year ago', '%n years ago', $dateInterval->y); } - return (string) $l->n('%n year ago', '%n years ago', $dateInterval->y); } /** @@ -219,11 +243,23 @@ class DateTimeFormatter implements \OCP\IDateTimeFormatter { } if ($diff->h > 0) { - return (string) $l->n('%n hour ago', '%n hours ago', $diff->h); + if ($timestamp > $baseTimestamp) { + return (string) $l->n('in %n hour', 'in %n hours', $diff->h); + } else { + return (string) $l->n('%n hour ago', '%n hours ago', $diff->h); + } } else if ($diff->i > 0) { - return (string) $l->n('%n minute ago', '%n minutes ago', $diff->i); + if ($timestamp > $baseTimestamp) { + return (string) $l->n('in %n minute', 'in %n minutes', $diff->i); + } else { + return (string) $l->n('%n minute ago', '%n minutes ago', $diff->i); + } + } + if ($timestamp > $baseTimestamp) { + return (string) $l->t('in a few seconds'); + } else { + return (string) $l->t('seconds ago'); } - return (string) $l->t('seconds ago'); } /** diff --git a/tests/lib/DateTimeFormatterTest.php b/tests/lib/DateTimeFormatterTest.php index 85884c9bfb..deb6a7c783 100644 --- a/tests/lib/DateTimeFormatterTest.php +++ b/tests/lib/DateTimeFormatterTest.php @@ -46,10 +46,13 @@ class DateTimeFormatterTest extends TestCase { $deL10N = \OC::$server->getL10N('lib', 'de'); return array( array('seconds ago', $time, $time), + array('in a few seconds', $time + 5 , $time), array('1 minute ago', $this->getTimestampAgo($time, 30, 1), $time), array('15 minutes ago', $this->getTimestampAgo($time, 30, 15), $time), + array('in 15 minutes', $time, $this->getTimestampAgo($time, 30, 15)), array('1 hour ago', $this->getTimestampAgo($time, 30, 15, 1), $time), array('3 hours ago', $this->getTimestampAgo($time, 30, 15, 3), $time), + array('in 3 hours', $time, $this->getTimestampAgo($time, 30, 15, 3)), array('4 days ago', $this->getTimestampAgo($time, 30, 15, 3, 4), $time), array('seconds ago', new \DateTime('Wed, 02 Oct 2013 23:59:58 +0000'), new \DateTime('Wed, 02 Oct 2013 23:59:59 +0000')), @@ -86,9 +89,15 @@ class DateTimeFormatterTest extends TestCase { // Normal testing array('today', $this->getTimestampAgo($time, 30, 15), $time), array('yesterday', $this->getTimestampAgo($time, 0, 0, 0, 1), $time), + array('tomorrow', $time, $this->getTimestampAgo($time, 0, 0, 0, 1)), array('4 days ago', $this->getTimestampAgo($time, 0, 0, 0, 4), $time), + array('in 4 days', $time, $this->getTimestampAgo($time, 0, 0, 0, 4)), array('5 months ago', $this->getTimestampAgo($time, 0, 0, 0, 155), $time), + array('next month', $time, $this->getTimestampAgo($time, 0, 0, 0, 32)), + array('in 5 months', $time, $this->getTimestampAgo($time, 0, 0, 0, 155)), array('2 years ago', $this->getTimestampAgo($time, 0, 0, 0, 0, 2), $time), + array('next year', $time, $this->getTimestampAgo($time, 0, 0, 0, 0, 1)), + array('in 2 years', $time, $this->getTimestampAgo($time, 0, 0, 0, 0, 2)), // Test with compare timestamp array('today', $this->getTimestampAgo($time, 0, 0, 0, 0, 1), $this->getTimestampAgo($time, 0, 0, 0, 0, 1)),